webentwicklung-frage-antwort-db.com.de

Wie implementiere ich ein benutzerdefiniertes Passwortfeld, das bei korrektem Passwort auf eine andere Seite umleitet?

Ich habe eine passwortgeschützte Seite (Seite X), aber ich benötige das Passwortformular, das den Zugriff auf Seite X ermöglicht, um auf der Homepage zu leben.

Mit dem Passwortformular auf der Homepage möchte ich, dass der Benutzer das richtige Passwort direkt eingeben kann. Wenn dies korrekt ist, möchte ich, dass der Benutzer auf die passwortgeschützte Seite X umgeleitet wird.

Ist das möglich umzusetzen? Wenn ein Benutzer auf einen durch ein Passwort geschützten Link drückt, wird er normalerweise zu dem Passwortformular weitergeleitet, bei dem es sich um eine eigene Seite handelt. Ich möchte diese Seite mit dem Zwischenpasswort jedoch ausschneiden und das Formular direkt auf der Startseite platzieren. Wenn Sie Tipps haben, lassen Sie es mich bitte wissen.

Ich habe versucht, die get_the_password_form -Funktion unten zu verwenden und die Seiten-/Beitrags-ID weiterzugeben. Es gibt den richtigen HTML-Code für ein Formular zurück und ein Formular wird angezeigt. Es funktioniert jedoch nicht richtig: Es wird nichts unternommen, obwohl das richtige Passwort eingegeben wurde. Die folgende Funktion stammt aus dem Ordner 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

Das Problem ist, dass WP nach erfolgreicher Authentifizierung zum Referrer umleitet.

Glücklicherweise können Sie auch _wp_http_referer angeben. Da dieser Code dem HTTP-Verweis vorgezogen wird, müssen wir dem Formular ein ausgeblendetes Feld hinzufügen und es mit dem Permalink des betreffenden Posts füllen:

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

mit 123 ist die Post-ID.

1
janh