Obliger les utilisateurs à se connecter pour voir les pages privées
Par défaut, il suffit de connaître le mot de passe d’un article privé pour accéder à son contenu. Découvrez la démarche à suivre pour forcer la connexion de l’utilisateur pour consulter l’article.
Dans WordPress, il existe les pages et articles privés. Il s’agit de pages et articles habituels qui nécessitent cependant, pour en lire le contenu, d’entrer un mot de passe précisé par l’auteur lors de leur création. D’ailleurs, si vous souhaitez en définir plusieurs, je vous conseille ce tutoriel sur mon site.
Malheureusement, dès que le mot de masse est diffusé, tout le monde peut accéder au contenu de la page ou de l’article. Je vous propose de forcer la connexion de l’utilisateur et de l’obliger à créer un compte pour s’y connecter afin d’entrer le mot de passe de la page.
Le formulaire de mot de passe
Copier le code ci-dessous dans le fichier functions.php
présent à la racine de votre thème :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
add_filter('the_password_form', 'bawonlym_the_password_form' );
function bawonlym_the_password_form( $output ) {
// Aucun utilisateur n'est connecté ?
if( !is_user_logged_in() ) :
// J'affiche une phrase indiquant que la page est protégée
$output = 'Cette page est protégée par un mot de passe. Pour la voir, merci de vous connecter :';
// Et j'ajoute à $output le formulaire de connection de WordPress
$output.= wp_login_form( array( 'echo' => false ) );
endif;
// On retourne le tout return $output;
return $output;
}
[/pastacode]
Je remplace le formulaire habituel qui me donne la possibilité d’entrer le mot de passe par le formulaire de connexion de WordPress. Je lui ajoute une ligne indiquant la raison pour laquelle il est invité à se connecter. Le hook the_password_form
fait très bien son travail.
Remarquez que si l’utilisateur est déjà connecté, on retourne $output comme on l’a eu, c’est à dire le formulaire de demande de pass.
Attention, cela n’est pas suffisant ! En effet, je peux toujours trouver le moyen d’envoyer le formulaire de mot de passe depuis une page que je n’avais pas fermé. Je suis pourtant bien déconnecté, mais depuis une autre page. Je vais donc être vigilant sur ce point.
Empêcher l’envoi du mot de passe
Il faut vérifier que la personne n’envoie pas le pass depuis une page contenant un formulaire de demande de pass. Je vais utiliser le hook init
et vérifier le contenu de $_POST
:
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
function bawonlym_template_redirect() {
// Si on a bien un password envoyé depuis le formulaire et que l'utilisateur n'est pas connecté
if( isset( $_POST['post_password'], $_POST['Submit'] ) && !is_user_logged_in() ):
// Je le redirige vers sa page de provenance
wp_safe_redirect( wp_get_referer() );
// Toujours die() après une redirection.
die();
endif;
}
add_action('init', 'bawonlym_template_redirect' );
[/pastacode]
Voilà, désormais le fichier est bien protégé.
13 Commentaires
Salut. Encore une fine astuce de ta part. Ce dont j’ai peur par contre est que cela ne concerne qu’une infime partie des blogs WordPress i.e. ceux qui monétisent et possèdent beaucoup de membres. De plus, je trouve que cela devient franchement contraignant pour le membre honnête qui va devoir se retaper le formulaire de login. Donc techniquement c’est utile mais est-ce que c’est bienvenu ?
Je dois réaliser un site internet sous WordPress et se pose justement la question de l’accès à certaines pages pour les membres enregistrés.
Ho j’avais oublié de te répondre. L’utilisateur si déjà connecté ne devra pas se connecter de nouveau donc rien ne change pour lui. Seuls les personnes ayant un compte mais qui ne sont pas connectées devront se logger.
Aussi j’ai sur mon site sécu des pages privées pour mes clients, rien à voir avec la monétisation. Chacun y trouvera son utilité, forcer la connexion d’un membre à son compte pour lire une page privée n’a rien de bizarre non ?
Ses you
Meric pour le blog je le decouvre à l’instant, vraiment très bien!
Merci pour l’astuce, peux-tu utiliser cette méthode pour les pages privées sans mot de passe ?
@kévin une page n’est privée que si elle a un mot de passe.
Hello,
cool ton article !
Dans mon cas, mon client aimerais qqch du style. Faire apparaitre une fenêtre en javascript lorsqu’on veut voir la Galerie photo et Obliger les gens à se connecter sur Facebook OU cliquer j’Aime s’ils veulent voir la galerie.
Est-ce que c’est possible ?
Comment ?
Est-ce qu’il y a un plugin wp qui permet ça ?
@Jéré: Ce n’est pas vraiment le même sujet que l’article ^^ Je ne peux pas vous aider pour votre cas qui est spécifique.
Soit, alors je peux lancer un autre sujet ?
Est-ce qu’il existe une manière de faire ca ou pas ?
Des idées ?
Bonjour,
J’ai suivi avec succès votre astuce mais il semble que le mot de passe reste dans le cache du navigateur.
La première fois que je consulte la page sans être connecté, tout va bien, le site me propose de me connecter et me demande le mot de passe.
Mais lorsque je me déconnecte de mon compte utilisateur et que je ré-affiche la page, elle apparaît sans que je sois connecté ou que le site m’est demandé le mot de passe de la page.
Hum, rectification, même en vidant le cache de firefox, je peux afficher la page sans être connecté …
Vous n’auriez pas une idée ?
Merci
Merci pour cet article !
Perso, je rencontre ce problème : j’ai créé une page que j’ai protégée. Sur cette page, il y a du texte et des images. Mais quand je consulte la page les images n’apparaissent pas !
Auriez-vous une idée de ce qui peut bloquer ?
Merci
Bonjour,
super article.
J’ai tout de même un soucis en effectuant la modification du fichier function.php et en faisant le test tout fonctionne mais cela oblige l’utilisateur à saisir deux fois sont mot de passe et son login et après le mot de passe de la page protégée.
Auriez-vous une solution pour éviter de saisir deux fois l’authentification et éventuellement si utilisateur connecté ne pas demander le mot de passe de la page ou de l’article protégé?
Bonjour,
Merci pour ce super article
Le lien précisé dans votre texte ne fonctionne plus (http://baw.li/multipass)
Pourriez-vous nous donner un nouveau lien ou un autre lien sur l’explication de ce tuto (définir plusieurs mot de passe)?
Merci d’avance
:-)