問題描述

我想通過他們的作者角色查詢帖子。並根據角色做一些事情。

我知道我們可以通過 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。