Web制作で役立つメモをWEB MEMO LOG

2023.05.01

【WordPress】パスワード保護を行った場合のカスタマイズ

パスワード保護画面のタイトルから「保護中:」を削除

add_filter('protected_title_format', 'remove_protected');
function remove_protected($title) {
	return '%s';
}

パスワード保護画面のテキスト変更(入力・エラーメッセージ)カスタム

function password_form_kai() {
return
'<p>こちらのコンテンツを閲覧するためにはパスワードが必要です。<br>
下記にパスワードを入力してください。</p>

<form action="' . home_url() . '/wp/wp-login.php?action=postpass" class="post-password-form" method="post">
<input name="post_password" type="password" size="24" placeholder="パスワードを入力してください" class="member__password-input" />
<input type="submit" name="Submit" class="member__password-submit" value="' . esc_attr__("パスワード送信") . '" />
</form>';
}
add_filter('the_password_form', 'password_form_kai');

//エラーメッセージ
add_filter( 'the_password_form', 'wpse_71284_custom_post_password_msg' );

/**
 * Add a message to the password form.
 *
 * @wp-hook the_password_form
 * @param   string $form
 * @return  string
 */
function wpse_71284_custom_post_password_msg( $form )
{
    // No cookie, the user has not sent anything until now.
    if ( ! isset ( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) )
        return $form;

    // The refresh came from a different page, the user has not sent anything until now.
    if ( ! wp_get_raw_referer() == get_permalink() )
        return $form;

    // Translate and escape.
    $msg = esc_html__( 'パスワードに誤りがあります。', 'your_text_domain' );

    // We have a cookie, but it doesn’t match the password.
    $msg = "<p class='custom-password-message'>$msg</p>";

    return $msg . $form;
}

【参考】Add error message on password protected page

パスワードの有効時間設定

function custom_postpass_time() {
	require_once ABSPATH . 'wp-includes/class-phpass.php';
	$hasher = new PasswordHash( 8, true );
 	//1日に設定(※変更する場合は「DAY_IN_SECONDS」を変更)
	setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), time() + DAY_IN_SECONDS, COOKIEPATH );
	wp_safe_redirect( wp_get_referer() );
	exit();
}
//MINUTE_IN_SECONDS(1分間)
//30 * MINUTE_IN_SECONDS(30分間)
//HOUR_IN_SECONDS(1時間)
//12 * HOUR_IN_SECONDS(12時間)
//DAY_IN_SECONDS(1日)
//3 * DAY_IN_SECONDS(3日)

add_action( 'login_form_postpass', 'custom_postpass_time' );

【参考】WordPressのパスワード保護ページをカスタマイズする方法

About Site

同じことを何度も検索していたりするんで、検索して解決したことを残そうと思いまして。