WordPress函数:post_password_required 判断是否是密码保护文章

江河/ 2023年07月17日/ WordPress/ 浏览 1857

WordPress 可以给文章设置密码保护。那么如何判断一篇文章是否是密码保护文章呢?


可以简单的认为 $post->password 不为空,即为密码保护文章。但这样不太严谨,WordPress 的钩子的原因。更好的方法是使用 WordPress 提供的专门的函数:post_password_required 。


函数原型:


post_password_required( int|WP_Post|null $post = null ): bool


确定帖子是否需要密码以及是否提供了正确的密码。


参数说明:


$post,文章ID 或 文章。如果为null,则使用全局 $post 。


函数源码:


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 ( 0 !== strpos( $hash, '$P$B' ) ) {
		$required = true;
	} else {
		$required = ! $hasher->CheckPassword( $post->post_password, $hash );
	}

	return apply_filters( 'post_password_required', $required, $post );
}


包含钩子:


apply_filters( 'post_password_required', bool $required, WP_Post $post )


使用举例:


$pass_masterPost = get_post();
if ( post_password_required(  $pass_masterPost->ID ) )
{
    echo get_the_password_form();
    echo '<p>THIS POST IS PASSWORD PROTECTED: PLEASE ENTER IT!</p>';
}
else
{
    if ( have_posts() )
    { 
        while ( have_posts() ) 
        {        
            the_post();
            the_content();
	    echo '<hr>';
         }    
    }
    else
    {
        echo '<p>Nothing Found!</p>';
    }
}


发表评论

暂无评论,抢个沙发...

客服 工单