web-dev-qa-db-fra.com

Comment inclure un message d'erreur lors de la connexion

Je suis un novice avec php, alors j'ai besoin d'aide avec celui-ci. S'il vous plaît supporter avec moi.

Je souhaite inclure un message d'erreur sur la page wp_login.php lorsque les visiteurs sont redirigés depuis une page "utilisateur uniquement/connecté". Vous trouverez ci-dessous le code que j'ai pour le modèle de page que j'utilise pour "utilisateurs uniquement". Il vérifie si l'utilisateur est connecté ou non. s'il ne le fait pas, il est redirigé vers la page de connexion. C'est là que je reste coincé. J'ai essayé mais ensemble du code que j'ai trouvé sur Google mais pas de chance. Est-il possible de passer un message d'erreur d'ici à la page de connexion?

if (!is_user_logged_in()) { auth_redirect(); }
add_action('login_head','ref_access');

function ref_access() {

global $error;

if( !empty($_GET['ref']) && 'access' == $_GET['ref'] )
    $error  = 'Restricted area, please login to continue.';}

Toute suggestion de code serait appréciée.

1
user27636

La chose ici est que vous gardez tout le code dans votre fichier de modèle, ce qui empêchera une partie de son exécution. Une fois que vous avez chargé votre modèle sans être connecté, auth_redirect() sera exécuté. Cette fonction arrête le chargement de la page et redirige vers la page de connexion. Ainsi, votre rappel login_head ne sera jamais appelé. Essayez de diviser votre code comme ceci:

votre-template.php

if (!is_user_logged_in()) {
    auth_redirect();
}

functions.php

add_action('login_head','ref_access');
function ref_access() {

    global $error;

    if( !empty($_GET['ref']) && 'access' == $_GET['ref'] )
        $error = 'Restricted area, please login to continue.';
}

Bien que ceci fasse ref_access exécuter sur login_head, cela signifie également qu'il sera exécuté chaque fois que la page de connexion sera affichée. Pour tenir compte de cela, vous devrez trouver un moyen de laisser WordPress garder une trace du lieu et de l'endroit où auth_redirect() est appelé et faire en sorte que ref_access() recherche un type de référent. La première chose qui me vient à l’esprit est d’utiliser des sessions pour stocker des informations sur chaque redirection en cours et effacer les données de la session dans ref_access() ou lors du chargement de nouvelles pages selon les besoins. .

Une autre option consiste à utiliser le filtre login_message pour afficher les messages sur la page de connexion, mais les problèmes de redirection/référent s’y appliquent également. Voici un exemple:

add_filter('login_message', 'wpse_87333_login_message');
function wpse_87333_login_message($messages) {
    $messages = 'Restricted area, please login to continue.';
}
1
Simon