Comment rediriger les utilisateurs non connectés vers une page spécifique?

16

Comment rediriger les utilisateurs non connectés demandant une page / URL spécifique vers une autre page / URL et afficher un message comme "réservé aux membres". Je sais qu'il est assez facile de coder en utilisant la fonction! Is_user_logged_in () mais je ne sais pas comment le coder parce que je suis un débutant sur WordPress. Attention à me dire le fichier pour mettre le code aussi.

user3187719
la source

Réponses:

30

Voici 2 exemples que vous devrez modifier légèrement pour le faire fonctionner selon vos besoins spécifiques.

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Mettez cela dans votre fichier de fonctions de thème enfant, changez l'ID de page ou le slug et l'url de redirection.

Vous pouvez également utiliser du code comme celui-ci:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

Vous pouvez ajouter le message directement à la page ou si vous souhaitez afficher le message pour tous les utilisateurs non connectés, ajoutez-le au code .

http://codex.wordpress.org/Function_Reference/wp_redirect

Brad Dalton
la source
Merci pour votre réponse J'ai aimé ça add_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }Mais ça ne marche pas
user3187719
Utilisez l'ID de page ou le slug ici, pas l'url mydomain.com/participate codex.wordpress.org/Conditional_Tags
Brad Dalton
is_page ('participer')
Brad Dalton
9

Ce serait mieux:

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

// continue as normal for authenticated users

Cela redirige l'utilisateur vers la page de connexion. Une fois connecté, l'utilisateur est redirigé vers la page sécurisée à laquelle il tentait d'accéder initialement.

Documentation ici:

https://codex.wordpress.org/Function_Reference/auth_redirect

Yahya Uddin
la source
4

Comment pouvons-nous vous dire où le mettre si vous ne nous avez pas dit quoi et où vous voulez l'afficher? Messages entiers? Des pages? Parties personnalisées de pages? Désolé ... Je suppose que ma boule de cristal ne fonctionne pas vraiment aujourd'hui.

Puisque vous êtes, et je vous cite: "un débutant pour wordpress", vous devriez plutôt apprendre, que de demander une réponse directe.

Quant à savoir lire le lien de référence 1. Cela vous indiquera dans quel fichier vous devez le placer.

Quant à la façon de le faire, vous devez d'abord lire les liens de référence 2 et 3.

Dans l'ensemble, cela devrait ressembler à ceci:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

Bien sûr, le code ci-dessus doit entrer dans une boucle . Vous pouvez le construire aussi complexe ou aussi simple que vous le souhaitez. Par exemple, au lieu d'un simple texte si vous n'êtes pas connecté, vous pouvez afficher le formulaire d'inscription complet par exemple ou - comme je le suggère - un écran divisé où l'utilisateur peut se connecter (car l'utilisateur peut avoir un compte mais a oublié de se connecter) ou s'inscrire (s'il n'en a pas).

  1. Hiérarchie des modèles
  2. Balises conditionnelles
  3. La boucle

Ajouté après les commentaires ci-dessous:

Pour rediriger l'utilisation headeravec le wp_login_url-, vérifiez les références 1 et 2 ci-dessous:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Référence:

  1. En-tête - PHP
  2. wp_login_url
Borek
la source
En fait, je ne connais pas la fonction sur wordpress qui renvoie l'URL ou le permalien demandé. Et à propos du message affiché, laissez-le, je veux juste les rediriger lorsqu'ils demandent une certaine URL sans être connecté.
user3187719
puis-je le faire avec $ pagenow?
user3187719
@ user3187719 a modifié ma réponse d'origine et a ajouté la solution à rediriger. PS. $pagenow? Vous essayez de tuer une mouche avec un canon sûr que cela fonctionnera, mais pourquoi si complexe? Rester simple. PS2: Apprenez PHP et WP Codex.
Borek
4

Vous ne pouvez pas rediriger vers une page spécifique, mais chaque utilisateur non connecté sera redirigé vers l'écran de connexion.

<?php auth_redirect(); ?>

Référence Wordpress: auth_redirect()

Juste pour mentionner une autre solution.

MCG
la source