我正在使用Wordpress密码页面保护功能来保护我正在工作的网站上的一些页面。这是一个大型多站点安装的一部分,这就是为什么我不想接近WP Users表(用于渗透的向量曲面较少),因为这可能会对其他站点产生不利影响。
内容本身不是优质或付费内容,只是本质上很敏感。我想做的是,设置一些带有密码保护的页面,如果/当访问者访问这些页面时,它们会被强制重定向到登录页面。在此处排序:
<?php if ( !post_password_required() ) {
echo \'this page is available for everyone to see\';
} else if ( post_password_required() && !is_page( 143 ) ) {
echo \'This page is password protected\';
wp_redirect( home_url( \'/rm_login/\' ) );
exit;
}?>
这是第一次“粗切”。我的核心问题是,当WP可以检测到用户有效地“解锁”了安全页面时,我想用“受保护”版本的菜单替换主nav。我的代码:
function my_wp_nav_menu_args( $args = \'\' ) {
global $post;
if( !post_password_required() ) {
$args[\'menu\'] = \'Primary-menu\';
} else {
$args[\'menu\'] = \'Protected-menu\';
}
return $args;
}
add_filter( \'wp_nav_menu_args\', \'my_wp_nav_menu_args\' );
但是,当用户点击“登录”页面时,它会与受保护的菜单交换。我知道我的代码只是检测页面上是否需要密码,这就是为什么会发生这种情况-但是否还有其他条件可以检查以验证/验证是否已解锁页面?
我知道这个方法存储了一个JS cookie,但它看起来是随机的,过期得相当快(对JS进行任何类型的检查都有点“古怪”)。
当我使用empty( $post->post_password )
检查状况。所有这些条件都会检查“需要密码”,但是否可以检查“输入密码”??
最合适的回答,由SO网友:Jacob Peattie 整理而成
如果要检查帖子是否有密码,并且密码是否已输入,请同时选中这两个选项post_password_required()
和$post->post_password
:
$post = get_queried_object();
if ( ! post_password_required( $post ) && ! empty( $post->post_password ) ) {
// Post has a password, but has been entered.
}