Tout savoir sur WordPress
Tutoriel WordPress

Pas de mot de passe de page privée pour les admins et les auteurs

Découvrez la méthode qui permet aux administrateurs et aux auteurs de ne pas préciser le mot de passe en cas d’article ou de page privé.

Comme je l’ai expliqué récemment dans cette astuce, il est possible de rendre une page ou un article privé en ajoutant un mot de passe. Ce qui me dérange, c’est que lorsque je suis administrateur et connecté, on me demande quand même le mot de passe. De même si je suis l’auteur de l’article, on me demande le mot de passe pour accéder à mon article !

Je vous propose une solution pour ne plus avoir à préciser le mot de passe si vous êtes l’auteur ou administrateur.

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”]


function bawnopass_template_redirect() {

    global $post, $current_user;
    
    // Si un utilisateur est connecté, et qu'il est admin ou l'auteur du post 
    // et que le post contient un pass et que le pass n'a pas été entré ...
    if( is_user_logged_in() 
         && !empty( $post )
	 && ( current_user_can( 'administrator' ) || $current_user->ID==$post->post_author ) 
	 && !empty( $post->post_password ) && post_password_required($post)
    ) :
 
	// On crée un hash pour le cookie avec l'api des hasher WP
	global $wp_hasher;
	if ( empty( $wp_hasher ) ):
		require_once( ABSPATH . 'wp-includes/class-phpass.php' );
		$wp_hasher = new PasswordHash( 8, true );
	endif;
	
        // Je crée le cookie avec le pass du post
	setcookie( 'wp-postpass_' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $post->post_password ) ), time() + 864000, COOKIEPATH );
		
        // Je le redirige vers sa page de provenance
	wp_safe_redirect( wp_get_referer() );
	
       // Toujours die() après une redirection.
       die();
    endif;
}
add_action('template_redirect', 'bawnopass_template_redirect' );

[/pastacode]

J’utilise le hook template_redirect car il n’y a encore eu aucun caractère imprimé. Etant donné que le post et l’utilisateur sont connus, je vais pouvoir faire mes tests et rediriger si besoin.

Maintenant, il vous suffit d’être connecté en tant qu’administrateur ou être l’auteur du post visité. Si c’est le cas, je crée le cookie correspondant au mot de passe comme si je l’avais tappé et je rafraichis la page. Cela passe inaperçu et c’est rapide, la page (ou article) s’affiche normalement !

Cet article a été mis à jour il y a 4511 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.

6 Commentaires

  1. Bravo Julio ! Encore bravo (je l’ai pensé plusieurs fois mais je ne l’ai pas écrit). Quel perfectionnisme ! d:-)
    Puis moi qui ne connais pas le PHP, qui le lit juste un peu, j’apprécie les commentaires au sein du code, il y en a qui ne se donnent pas la petite peine de le faire…

  2. Merci à toi ! Je trouve ce comportement de code tellement normal que je me demande pourquoi c’est pas déjà dans WordPress. Et puis je me dis “ha mais oui, ça ya est pas car je peux le faire avec un hook” ;)

  3. Sur une 404 ou une recherche sans résultat, tu n’as pas de warning en étant “auteur non administrateur” ?
    Je serais tenté de rajouter un !empty($post) au début du if.

    En tout cas c’est un truc que je vais certainement rajouter de base dans mon template :)
    Thx dude.

  4. ho zut, remplaçons alors :
    if( is_user_logged_in()
    par
    if( is_user_logged_in() && !empty( $post )

    Merci !

  5. Bonjour Julio,
    Je ne sais plus si c’est encore d’actualité, mais je souhaita permettre à un membre connecté comme abonné de lire côté public un article avec l’option privé (donc même pas l’auteur)
    Est-ce adaptable ??
    Merci