如何将未登录的用户重定向到使用POST_PASSWORD_REQUIRED()登录

时间:2013-07-02 作者:tommyf

我已经创建了一个会员网站,这是工作方式,我想在非成员不能查看私人网页。

然而,我希望当没有登录的人单击链接到私人页面的链接时,他们应该被定向到我的登录页面。

我能找到的最接近的方法是使用post\\u password\\u required(),但它似乎不起作用。

我不想对非成员隐藏链接。

function redirect_to_login() {
    if( post_password_required( get_the_ID() )  ) {
        wp_redirect( "index.php?p=50" );
    }
}
add_action(\'wp\', \'redirect_to_login\');

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您正在使用的函数--post_password_required-- 适用于password protected pages, 不适用于private 第页。老实说,我不知道你的意思是什么,但如果你的意思是“私人”,就像你描述的那样,那么。。。

我不知道is_private 函数,但您可以检查post对象本身。不过有一个陷阱。“私人”帖子受到疯狂的保护。没有权限查看帖子的用户将获得404。我认为以下方法可以奏效,但由于“私人”帖子的性质,这可能仍然有问题。它还没有经过严格的测试。

function redirect_to_login() {
  global $wp_query,$wpdb;
  if (is_404()) {
    $private = $wpdb->get_row($wp_query->request);
    if( \'private\' == $private->post_status  ) {
      wp_safe_redirect(home_url(get_permalink(188)));
      die;
    }
  }
}
add_action(\'template_redirect\', \'redirect_to_login\');

SO网友:David Faber

我遇到了完全相同的问题,我找到了一个很好的解决方案。在调查Wordpress如何准确地处理我发现的“Private-404”时,发现有问题的帖子位于queryed\\u对象中。所以你可以检查一下。因此,在您的404中。php执行以下操作:

$queried = get_queried_object();
if (is_a($queried, \'WP_Post\') && $queried->post_status == \'private\') {
    // Set correct header
    header(\'HTTP/1.0 403 Forbidden\', true);
    // Show login form here or redirect to 
} else {
    // show 404-page
}

SO网友:GhostToast

在标头或相应的模板文件中尝试以下操作:

$not_auth_redirect = get_permalink(8); // some page\'s id
if(!is_user_logged_in() && post_password_required(get_the_ID()) {
    wp_redirect( $not_auth_redirect );
}
你可以为你的主页或行动调用页面设置一个ID,然后让那些没有登录并且需要密码的人重定向到那里。

结束

相关推荐

Subdomain login problems

今晚,我在本地机器上安装了一个干净的WordPress副本,目的是尝试设置子域多站点安装。(我有很多使用子目录的经验,但这是我第一次使用子域。)我在我的/etc/hosts 文件:127.0.0.1 multi 127.0.0.1 snoopy.multi 127.0.0.1 robots.multi 我安装了WordPress并按照Codex\'s Create a Network 页我设置了Apache配置,以便snoopy.multi 和robots.multi 指向的目录