Tout savoir sur WordPress
Tutoriel WordPress

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é.

Cet article a été mis à jour il y a 4286 jours - Il n'est peut être plus à jour !

Article écrit par Julio P.

Fondateur de SecuPress, l’extension de sécurité WordPress, Julio Potier est un Expert WordPress, un Formateur Expérimenté et un Consultant en Sécurité Web.

Il aime partager ses compétences et ses réflexions sur WordPress, donnant des conférences partout dans le monde.

13 Commentaires

  1. 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 ?

  2. 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

  3. 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 ?

  4. @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.

  5. Soit, alors je peux lancer un autre sujet ?

    Est-ce qu’il existe une manière de faire ca ou pas ?
    Des idées ?

  6. 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

  7. 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

  8. 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é?

  9. 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
    :-)