Pages protégées par mot de passe, modèle de page et personnalisation

Pour un projet j’ai dû jouer un peu avec la fonction bien pratique, native dans WordPress, des pages protégées par un mot de passe.

Comment activer la protection

Lock iconCa se passe dans la partie Publier des pages et articles. C’est une option de Visibilité. Cliquez sur Modifier et vous pouvez alors choisir trois visibilités : Public, protégé par un mot de passe et privé. Si vous choisissez protégé par un mot de passe il vous est demandé de choisir un mot de passe. Une fois celui ci choisi, il ne reste plus qu’à cliquer sur Ok et mettre à jour votre article ou page.

Modèle de page

Ma page était une page un peu particulière car elle affichait une liste de produits. Les produits étant des custom post type. En fait, si je n’avais pas eu besoin de protéger cette page par un mot de passe j’aurais utilisé le template d’archive de mon custom post type. Tout ça pour dire qu’après avoir créé mon modèle de page et l’avoir assigné à ma page protégée, la protection ne marchait plus. Bizarre.
J’ai donc entrepris quelques recherches sur comment marche cette protection et comment je pourrais la faire marcher dans mon modèle de page.
Il s’avère que cette protection filtre la fonction get_the_content(). Si le mot de passe n’a pas été rentré elle change le contenu par un formulaire, sinon la fonction renvoie bien le contenu de la page.
Mon problème c’est que je n’utilise pas cette fonction car j’affiche tout autre chose dans sur cette page. Heureusement, j’ai trouvé la fonction qui me permet de faire ce que je veux post_password_required() c’est cette fonction qui fait la vérification que le mot de passe a bien été renseigné par le visiteur. Je l’utilise donc comme suit :

if( post_password_required() ){
    the_content();
} else {
  //Mon super affichage personalisé
}
Capture du formulaire par défaut pour les pages protégé par mot de passe
Formulaire par défaut pour les pages protégé par mot de passe

Filtrer le titre pour enlever le « Protégé »:

Comme toujours avec WordPress il s’agit de trouver le bon filtre, voilà celui qui marche et comment l’utiliser

function remove_private_title( $title ) {
    // Return only the title portion as defined by %s, 
    // not the additional
    // 'Private: ' as added in core
    return "%s";
}
add_filter( 'protected_title_format', 'remove_private_title' );

Modifier le formulaire

Encore une fois il s’agit de jouer avec un filtre WordPress

function custom_password_prompt($content) {
  $output = $content . 'Et oui je suis protégé et personnalisé'; 
  return $output; 
} 
add_filter('the_password_form', 'custom_password_prompt');

L’idée ici est de créer une chaine de caractère à retourner contenant le code HTML. IL ne faut pas faire d’affichage. Si vous ne voulez pas du tout utliser le contenu créé par WordPress vous devez juste créer au minimum un formulaire comme ceci pour que l’enregistrement du mot de passe fonctionne.

$output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
    <input name="post_password" type="password" />
    <input type="submit" name="Submit" value="ok" />
</form> ';

Vous pouvez y ajouter ce que vous voulez mais il faut garder les « name » des inputs et les réglages du form

Sources

30 réponses sur “Pages protégées par mot de passe, modèle de page et personnalisation”

  1. J’ai modifié le contenu de certaines pages hier. Normalement toutes les pages sont protégées par un mot de passe. Mais aujourd’hui, quand je me connecte à mon site, les pages ne sont plus protégées. Je n’ai laissé public que les rubriques qui indiquent le contenu des sous-rubriques. Pourquoi ? J’ai peur que les visiteurs aient accès au contenu de ces sous rubriques sans mot de passe. Merci de me dire ce que je dois faire.

    1. Bonjour,

      Quand je navigue sur votre site tout le contenu des sous-rubriques est bien protégé par mot de passe. Je ne vois aucun problème.

      Il est possible que vous y ayez accès car vous avez déjà entré le mot de passe et que votre navigateur garde cela en mémoire. Vider vos cookies, ou essayer avec un autre navigateur, ou avec le mode privé de votre navigateur.

      1. Bonjour ! merci de votre réponse très rapide ! finalement, ça a fini par marcher, j’ai du remettre le thème, surement un petit bug ! merci pour tout !

          1. Je retire ce que j’ai dit, ça ne fonctionne pas .. j’essaie de faire la partie pour mettre un mot de passe sur ma page personnaliser grâce à
            if(post_password_required())
            {
            the_content();
            }
            else
            { … rien a faire ça ne le prend pas en compte :/

          2. Tout est bon en fait .. il y a des conflits au niveau du nom de la page, de celui donner au menu l’url, je vais résoudre cela, merci !

  2. Merci pour cet article très clair. Je suis en localhost et ai protégé une page avec mot de passe. Quand je me connecte la page formulaire demandant le mot de passe n’apparaît pas. C’est celle avec le titre : Protégé: « ma page » qui apparaît. Que puis-je faire? Où doit-on mettre les lignes de codes que vous avez mentionnées?.

    1. Le formulaire dois remplacer le contenu de la page protégé par un mot de passe. C’est donc normale que ce soit cette page qui s’affiche. En revanche le contenu de la page ne devrait pas s’afficher, tu devrais avoir un formulaire pour entrer ton mot de passe.

      1. Exact c’était bien mon problème. J’ai retiré l’historique de navigation et les cookies de mon navigateur et le formulaire demandant le mot de passe est réapparu. Tant mieux. Mais tu ne m’a pas dit par contre ou l’on collait ton code au cas ou j’aurais à nouveau ce problème.Merci .

    2. Le code pour afficher le formulaire dans un modèle de page personnalisé vas dans le code du modèle de page. Ce qui ne semble pas te concerné.
      Les autres codes pour faire disparaitre le « protégé » du titre ou personnaliser ton formulaire vont dans ton théme (fichier functions.php par exemple) si tu écris un théme, sinon dans un mu-plugin

  3. Bonjour,

    Y a-t-il une solution pour que le mot de passe soit demandé à chaque connexion?
    Qu’il ne soit pas stocké dans les cookies ni dans l’historique de navigation.

    Merci par avance de ton aide

    1. Bonjour, j’aimerais également pour afficher un message (plutot que de retourner la même page de demande de mot de passe) lorsque l’utilisateur se trompe de mot de passe. Avez-vous trouver la réponse à votre question? merci!!

    1. Le formulaire par défaut est dans les fichiers du core de WordPress. Dans le dossier « wp-include », fichier « post-template.php », c’est la fonction « get_the_password_form() » qui gère la création de ce formulaire (ligne 1663 dans WordPress 4.3)

  4. Bonjour,
    Merci pour ces informations. Pour ma part, sur n’importe quelle page, la protection par mot de passe ne semble pas fonctionner. Au clic sur OK, la page en mode « protégé » se recharge et redemande le mot de passe. Du coup, je voudrais tester la fonction « post_password_required()  » mais je ne vois pas ou la mettre d’autant que je n’ai pas reussi à localiser « get_the_content ».

    Merci par avance,

  5. Merci pour l’info. Tout fonctionne chez moi néanmoins la page finale n’apparait que sous IE. Sous chrome et FF, j’ai testé en mode guest et privée puis vidé mes cookies et je reste bloqué sur la page demandant le mot de passe. Lorsque je tente de mettre dans post-template.php:

    if( post_password_required() ){
    the_content();
    } else {
    //Mon super affichage personalisé
    }

    Ma page en front n’affiche plus rien. Faut il le mettre à un endroit précis en remplacement ou en complément d’un code existant :

    Line 263: if ( post_password_required( $post ) )
    Line 363: if ( post_password_required() ) {
    Line 455: if ( post_password_required( $post->ID ) ) {
    Line 456: $classes[] = ‘post-password-required’;
    Line 742: function post_password_required( $post = null ) {

    Merco

  6. Bonjour,
    tout d’abord votre article est très intérressant, merci.
    J’ai un souci avec la protection des pages par mot de passe. La page est bien marqué « protégé par mot de passe » le mot de passe est défi, par contre le mot de passe n’est jamais requi lorsque l’on souhaite ouvrir la page. Que se soit chez moi ou chez quelqu’un d’autre. Pour exemple cette page: http://galerie.atelierdelart.com/lucie-romain/
    Je ne sais plus quoi faire exactement. Je ne me retouve pas vraiment dans ce qui est ecrit dans l’article et les commentaire au-dessus. Aurriez-vous une solution ?

  7. Bonjour,

    J’ai créer un article protégé par mot de passe, tout fonctionne correctement, il est protégé pas de soucis de ce côté là. En revanche, le mot de passe est gardé en mémoire et n’est demandé qu’au premier accès à l’article. Y a-t-il une solution pour qu’il soit demandé à chaque fois que l’on revient dessus?
    Cet article est une galerie de photo privée et je ne souhaiterai pas que quelqu’un y ayant accès depuis un ordi public ou partagé puisse laisser la possibilité d’y accéder à une autre personne.

    Merci d’avance pour votre aide et votre réponse!

  8. Bonjour,

    Je débute avec wordpress. je souhaite protéger certaine pages par un mot de passe. J’ai utilisé votre astuce « protéger la page par un mot de passe ». j’ai bien la dénomination  » page protégée par un mot de passe  » dans la console, sur le site, la page n’est pas accessible au public puisqu’on demande bien le mot de passe mais en revanche le mot de passe ne fonctionne pas. J’ai fait plusieurs essais avec différents mots de passe J’ai bien confirmer les changement. il est impossible d’avoir accès à la page.
    En vous remerciant d’avance pour votre aide.

  9. Bonjour,

    Je début avec wordpress également. Je souhaite protéger un article mais cela ne fonctionne pas. Avant de publier je saisie bien mon mot de passe. Lorsque que ce dernier est mis en ligne, je me rend sur le site où il est bien écrit « protégé » mais il ne me demande pas de mot de passe et l’article est donc accessible à tous…

    Auriez-vous une solution à me proposer ?

    Je vous remercie d’avance.

  10. Bonjour,

    Je souhaite définir un mot de passe par page à afficher..
    Un seul point d’accés dans lequel je demande le mot de passe uniquement.
    En fonction du mot de passe rentré, le visiteur est redirigé vers la page associée.

    Est ce possible?

    Merciii

  11. Bonjour,
    merci pour cet article ! Je tente ma chance à poser une question 5 ans après … on ne sait jamais !
    J’ai suivi cela :
    if( post_password_required() ){
    the_content();
    } else {
    //Mon contenu à base de requete php sql et d’affichage d’un tableau
    }
    mais malheureusement mon contenu à base de requête etc. s’affiche toujours. Comme si la page n’était pas protégée 🙁
    Une piste à me suggérer ?

  12. Bnonjour j`ai creer une application web et la page d`accueil a un mot de pass mais dans le locahost on peut avoir acces a d`autres pages sans passer par la page du mot de pass quelqu`un peut m`aider?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *