Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

post_password_required()WP 2.7.0

Проверяет защищен пост паролем или нет. Также проверяет правильность пароля, если пароль у поста установлен.

Хуки из функции

Возвращает

true|false. Логические: true, если нужно ввести пароль для просмотра поста или false, если пост не защищен паролем.

Использование

if( post_password_required( $post ) ){ ... }
$post(число/объект) (обязательный)
ID поста или объект с данными поста.
По умолчанию: глобальная переменная $post

Примеры

0

#1 Действие только для постов защищенных паролем

Допустим что пост 443 защищен паролем, тогда:

if( post_password_required( 443 ) ){
	echo "Этот пост защищен паролем!"; 
}
0

#2 Показать записи только если у пользователя есть пароль записи

$master_post = get_post();

if ( post_password_required(  $master_post->ID ) ) {
	echo '<p>ЭТА ЗАПИСЬ ЗАЩИЩЕНА ПАРОЛЕМ: ПОЖАЛУЙСТА, ВВЕДИТЕ ЕГО!</p>';
	echo get_the_password_form();
}
else {
	if ( have_posts() ) { 
		while ( have_posts() ) {        
			the_post();
			the_content();
			echo '<hr>';
		 }    
	}
	else {
		echo '<p>Ничего не найдено!</p>';
	}
}

Примечание: Еще одно, на что вам нужно обратить внимание, это куки, которые устанавливаются после того, как пароль был использован один раз, это делает отладку сложной, (совет), используйте режим инкогнито при тестировании вашего кода.

См.: get_the_password_form(),

Список изменений

С версии 2.7.0 Введена.

Код post_password_required() WP 7.0

function post_password_required( $post = null ) {
	$post = get_post( $post );

	if ( empty( $post->post_password ) ) {
		/** This filter is documented in wp-includes/post-template.php */
		return apply_filters( 'post_password_required', false, $post );
	}

	if ( ! isset( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) {
		/** This filter is documented in wp-includes/post-template.php */
		return apply_filters( 'post_password_required', true, $post );
	}

	require_once ABSPATH . WPINC . '/class-phpass.php';
	$hasher = new PasswordHash( 8, true );

	$hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );
	if ( ! str_starts_with( $hash, '$P$B' ) ) {
		$required = true;
	} else {
		$required = ! $hasher->CheckPassword( $post->post_password, $hash );
	}

	/**
	 * Filters whether a post requires the user to supply a password.
	 *
	 * @since 4.7.0
	 *
	 * @param bool    $required Whether the user needs to supply a password. True if password has not been
	 *                          provided or is incorrect, false if password has been supplied or is not required.
	 * @param WP_Post $post     Post object.
	 */
	return apply_filters( 'post_password_required', $required, $post );
}
2 комментария