web-dev-qa-db-fra.com

Comment implémenter un champ de mot de passe personnalisé qui redirige vers une autre page avec un mot de passe correct?

J'ai une page protégée par mot de passe (page X), mais j'ai besoin du formulaire de mot de passe qui autorise l'accès à la page X pour accéder à la page d'accueil.

Avec le formulaire de mot de passe sur la page d'accueil, je veux que l'utilisateur puisse entrer directement le mot de passe correct. Si correct, je veux que l'utilisateur soit redirigé vers la page X protégée par mot de passe.

Est-ce possible d'implémenter? Normalement, lorsqu'un utilisateur appuie sur un lien protégé par mot de passe, il est redirigé vers le formulaire de mot de passe qui constitue sa propre page séparée. Mais je veux couper cette page de formulaire de mot de passe intermédiaire et placer le formulaire directement sur la page d'accueil. Si vous avez des conseils, s'il vous plaît faites le moi savoir.

J'ai essayé d'utiliser la fonction get_the_password_form ci-dessous et de transmettre la page/l'ID de publication. Il renvoie le code HTML approprié pour un formulaire et un formulaire est affiché. Cependant, il ne fonctionne pas correctement: ne fait rien malgré la saisie du mot de passe correct. La fonction ci-dessous provient du dossier wp-includes.

function get_the_password_form( $post = 0 ) {
    $post = get_post( $post );
    $label = 'pwbox-' . ( empty($post->ID) ? Rand() : $post->ID );
    $output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" class="post-password-form" method="post">
    <p>' . __( 'This content is password protected. To view it please enter your password below:' ) . '</p>
    <p><label for="' . $label . '">' . __( 'Password:' ) . ' <input name="post_password" id="' . $label . '" type="password" size="20" /></label> <input type="submit" name="Submit" value="' . esc_attr_x( 'Enter', 'post password form' ) . '" /></p></form>
    ';

    /**
     * Filters the HTML output for the protected post password form.
     *
     * If modifying the password field, please note that the core database schema
     * limits the password field to 20 characters regardless of the value of the
     * size attribute in the form input.
     *
     * @since 2.7.0
     *
     * @param string $output The password form HTML output.
     */
    return apply_filters( 'the_password_form', $output );
}
1
Yoon

Le problème est que WP sera redirigé vers le référent lorsque l'authentification réussira.

Heureusement, vous pouvez également fournir _wp_http_referer et il sera préféré au référent HTTP. Nous devons donc ajouter un champ caché au formulaire et le remplir avec le permalien du message en question:

echo str_replace('</form>', '<input type="hidden" name="_wp_http_referer" value="' . esc_attr(get_permalink(123)) . '" /></form>', get_the_password_form(123));

avec 123 étant l'identifiant de poste.

1
janh