Bonjour, mon client a besoin d’ajouter un mot de passe pour protéger la page dans wordpress. Donc, je fais de la visibilité de la page comme mot de passe protéger et cela fonctionne correctement. Mais le client donne une série de mots de passe. On lui donne le mot de passe 2314 à 2335. Ainsi, le mot de passe est un nombre quelconque compris entre 2314 et 2335. Maintenant ce que je fais? Existe-t-il une méthode ou un appel pour résoudre ce problème? Un crochet est là?
Voici juste un test de démonstration pour le plaisir, juste pour voir si cela pourrait être possible:
Nous définissons d'abord le mot de passe de la publication, de la manière habituelle:
Ensuite, nous créons un champ personnalisé appelé wpse_extra_passwords
qui prend des mots de passe séparés par des virgules:
Ce sont les mots de passe supplémentaires pour cette publication.
Définissons la fonction d'assistance suivante, basée sur la fonction principale post_password_required()
:
/**
* Helper function, check password + extra passwords
*/
function wpse_post_password_required( $post = null )
{
$post = get_post($post);
if ( empty( $post->post_password ) )
return false;
if ( ! isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
return true;
require_once ABSPATH . WPINC . '/class-phpass.php';
$hasher = new PasswordHash( 8, true );
$hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );
if ( 0 !== strpos( $hash, '$P$B' ) )
return true;
// Check the current password
if( $hasher->CheckPassword( $post->post_password, $hash ) )
return false;
// Fetch extra passwords
if( ! $extra_passwords = get_post_meta( $post->ID, 'wpse_extra_passwords', true ) )
return true;
// Check these extra passwords
$extra = explode( ',', $extra_passwords );
foreach( (array) $extra as $password )
{
$password = trim( $password );
if( ! empty( $password ) && $hasher->CheckPassword( $password, $hash ) )
return false;
}
return true;
}
Ensuite, nous accrochons dans le filtre the_password_form
et ciblons l'objet post unique dans la boucle principale:
/**
* Support extra post passwords for single posts in the main loop
*/
add_filter( 'the_password_form', function( $output )
{
if( ! is_single() || ! in_the_loop() || did_action( 'the_password_form' ) )
return $output;
$post = get_post();
// Display password form if none of the passwords matches:
if( wpse_post_password_required( $post ) )
return $output;
// Get the current password
$password = $post->post_password;
// Temporary remove it
$post->post_password = '';
// Fetch the content
$content = get_the_content();
// Set the password back
$post->post_password = $password;
return $content;
} );
J'espère que vous pourrez le tester et continuer à jouer avec.
Vous avez mentionné des mots de passe tels que 2314. Il est très facile d'écrire un programme capable de deviner des mots de passe simples comme ceux-là. J'ai donc utilisé des mots de passe un peu plus forts dans cette démo.
Vous pouvez également utiliser un plugin pour cela: https://wordpress.org/plugins/multiple-post-passwords/
Et oui, avoir une série de chiffres comme mots de passe est une mauvaise idée;)