web-dev-qa-db-ja.com

正しいパスワードで別のページにリダイレクトするカスタムパスワードフィールドを実装する方法

私はパスワードで保護されたページ(ページX)を持っています、しかし私はホームページに住んでいるためにページXへのアクセスを許可するパスワードフォームが必要です。

ホームページのパスワードフォームを使って、ユーザーに正しいパスワードを直接入力できるようにします。正しければ、私はユーザをパスワードで保護されたページXにリダイレクトさせたいです。

これは可能ですか?通常、ユーザーがパスワードで保護されているリンクを押すと、そのユーザーは別のページであるパスワードフォームにリダイレクトされます。しかし、この中間パスワードフォームページを切り取り、そのフォームをホームページに直接配置したいのです。何かアドバイスがあれば、教えてください。

以下のget_the_password_form関数を使用して、ページ/投稿IDを渡してみました。フォームの適切なHTMLコードを返して、フォームが表示されます。ただし、正しく機能しません。正しいパスワードを入力しても何もしません。以下の関数は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

問題は、認証が成功するとWPが参照元にリダイレクトされることです。

幸いなことに、あなたは_wp_http_refererを供給することもでき、それはHTTP Referrerよりも優先されるので、フォームに隠しフィールドを追加し、問題の投稿のパーマリンクでそれを埋める必要があります:

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

123が投稿IDです。

1
janh