问题描述
我想通过他们的作者角色查询帖子。并根据角色做一些事情。
我知道我们可以通过 get_posts 或 WP_query 获取帖子,问题是没有参数根据作者角色排序帖子。或者,我们也可以将 get_users 和 get_posts 组合在一起,像这样
$users = get_users(array(role => 'author'));
foreach($users as $user){
//here we can use get_posts to query the posts by the $user->ID
} .....
这样做太笨了我想知道是否有其他方式根据角色来查询帖子,也可能是 SQL 查询?
最佳解决方案
我以前没有真正搞砸自定义帖子查询,但这是我的一个解决方案:
function get_posts_by_author_role($role) {
global $wpdb;
return $wpdb->get_results( "SELECT p.* FROM {$wpdb->posts} p, {$wpdb->usermeta} u"
." WHERE p.post_type = 'post'"
." AND p.post_status = 'publish'"
." AND u.user_id = p.`post_author`"
." AND u.meta_key = 'wp_capabilities'"
." AND u.meta_value LIKE '%"{$role}"%'" );
}
此函数只有在作者指定了角色时才返回帖子。它在 3.4 的本地安装测试和工作,但如果您有任何问题,请告诉我。
我希望这有帮助。
使用示例
$posts = get_posts_by_author_role('author');
foreach($posts as $post) echo $post->post_title, '<br />';
次佳解决方案
尝试这个
创建一个函数来改变查询的 where 子句:
function authors_where_filter( $where ) {
global $wpdb;
$ids = get_users(array('role' => 'author' ,'fields' => 'ID'));
$where .= " AND post_author IN ($ids)";
return $where;
}
然后在你查询之前只是钩它 ex:
add_filter('posts_where','authors_where_filter');
$all_posts = new WP_Query(array('posts_per_page' => -1 .....
remove_filter('posts_where');
您应该在单个查询中获取作者用户的所有帖子 (实际上有两个用于获取用户,另一个是获取帖子)
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。