私はパスワードで保護されたページ(ページ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 );
}
問題は、認証が成功すると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です。