2013-10-03 31 views
0

我知道你可以使用WP_Query如果用户登录返回的状态为private的所有帖子,但看不到如何为未登录的用户做到这一点?如何向未登录的用户显示密码保护页面?

EG:对于谁是登录的用户...

$query = new WP_Query('post_status=private'); 

但是,如何为谁是登录用户呢?

回答

1

您可以使用过滤器posts_clauses,如:

add_filter('posts_clauses', 'wpse70214_posts_clauses'); 

function wpse70214_posts_clauses($pieces) 
{ 
    global $wpdb; 
    if(!is_user_logged_in()) 
     $pieces['where'] = str_replace( 
      "post_status = 'publish')", 
      "post_status = 'publish' OR $wpdb->posts.post_status = 'private') ", 
      $pieces['where'] 
     ); 

    return $pieces; 
} 
+0

看起来像一个明确的解决方案!将尝试它,让你知道尽快!非常感谢您的帮助! :) – myatix

+0

只是一个简单的问题。我试图阻止这个代码在我的function.php页面中,然后调用我的页面模板中的函数wpse70214_posts_clauses(),但它不会返回任何内容?对不起,我不是一个很强大的开发人员。感谢您迄今的帮助... – myatix

+0

不,您没有呼叫功能。过滤器照顾这一点。比'functions.php'更好的是创建[你自己的小工具插件](http://wordpress.stackexchange.com/q/72160/12615)。 – brasofilo

0

你可以创建一个访客用户,如果当前用户没有登录使用代码作为访客登录它们,那么你的查询将工作。

您将需要在构建解决方案时查看组和权限。此外,最后要考虑的是如何向访客用户呈现登录屏幕,以便他们可以作为真实用户登录。

+0

嗨亚当,感谢您的回答,但我不是一个强大的开发人员,所以甚至不知道如何开始做类似的东西...当然有一个更简单的方法? – myatix

相关问题