我有一个自定义的Wordpress主题,其中包括一个仅限成员的部分。为了实现这一点,我在受限页面的顶部有以下代码。
<?php if ( ! current_user_can (\'view_players_area\') ) { header(\'Location: \' . wp_login_url( "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]" ) ); } ?>
大多数情况下,这很好用,但有时它只是无缘无故地不起作用。没有错误消息,只是在您登录时,它会不断重定向回登录页面。我最初使用
is_user_logged_in()
并且有一个类似的问题,这就是导致我使用此代码的原因。
如果有人对可能导致这种情况的原因有任何建议,我将不胜感激——这让我毛骨悚然,因为会员区需要在未来几周内上线。
当做
本
Edit
根据回复和聊天室中一些用户的建议,我修改了代码,这样重定向就不会在模板中完成。现在在a
functions.php
包括以下内容:
<?php
function redirect_restricted_areas( $query )
{
if ( !is_admin() && $query->is_main_query() )
{
if ( ! current_user_can( \'view_players_area\' ) && (
$query->is_singular (\'player-page\') ||
$query->is_post_type_archive (\'player-page\')
) )
header(\'Location: \' . wp_login_url( "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]" ) );
}
}
add_action ( \'pre_get_posts\', \'redirect_restricted_areas\' );
遗憾的是,虽然这是一个很好的建议,可以简化我的代码,但它并不能解决我的问题。
Further Edit
因此,通过一些调试,我可以看到$current\\u user并不总是被设置,但我不知道为什么。
Another Edit
进一步调查,这似乎与饼干有关。在了解了一些Wordpress认证cookies之后,我注意到以下内容。使用dBug(
print_r()
) 我确定,根据PHP,Wordpress auth cookie不存在,但如果打开Chrome inspector,我可以清楚地看到cookie就在那里。现在还不太清楚该怎么做,但如果有人能给我指出正确的方向。。。