我知道你可以使用WP_Query
如果用户是登录返回的状态为private
的所有帖子,但看不到如何为未登录的用户做到这一点?如何向未登录的用户显示密码保护页面?
EG:对于谁是登录的用户...
$query = new WP_Query('post_status=private');
但是,如何为谁是登录不用户呢?
我知道你可以使用WP_Query
如果用户是登录返回的状态为private
的所有帖子,但看不到如何为未登录的用户做到这一点?如何向未登录的用户显示密码保护页面?
EG:对于谁是登录的用户...
$query = new WP_Query('post_status=private');
但是,如何为谁是登录不用户呢?
您可以使用过滤器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;
}
你可以创建一个访客用户,如果当前用户没有登录使用代码作为访客登录它们,那么你的查询将工作。
您将需要在构建解决方案时查看组和权限。此外,最后要考虑的是如何向访客用户呈现登录屏幕,以便他们可以作为真实用户登录。
嗨亚当,感谢您的回答,但我不是一个强大的开发人员,所以甚至不知道如何开始做类似的东西...当然有一个更简单的方法? – myatix
看起来像一个明确的解决方案!将尝试它,让你知道尽快!非常感谢您的帮助! :) – myatix
只是一个简单的问题。我试图阻止这个代码在我的function.php页面中,然后调用我的页面模板中的函数wpse70214_posts_clauses(),但它不会返回任何内容?对不起,我不是一个很强大的开发人员。感谢您迄今的帮助... – myatix
不,您没有呼叫功能。过滤器照顾这一点。比'functions.php'更好的是创建[你自己的小工具插件](http://wordpress.stackexchange.com/q/72160/12615)。 – brasofilo