2016-09-19 37 views
1

我想按特定姓名對作者進行排序。WorsPress orederby特定作者姓名

這是我的代碼:

$authorname = 'max'; 

$blog_arr = array(
    'posts_per_page' => -1, 
    'post_type' => 'post', 
    'orderby' => '(author = "'.$authorname.'") desc' 
); 

$post_arr = get_posts($blog_arr); 

不幸的是WordPress的過濾我的排序依據的核心。

這回答也於事無補: SQL Server - Order by caseOrdering by specific field value firstHow do I return rows with a specific value first?

謝謝你的幫助。 最好的問候

+0

$ AUTHORNAME = '最大'; $ blog_arr =陣列( 'posts_per_page'=> -1, 'post_type'=> '後', '的OrderBy'=> '(作者=「'。$ AUTHORNAME'「), '降序' ); $ post_arr = get_posts($ blog_arr); –

回答

0

我已經找到了有效的解決方案:

function get_user_posts() { 

    $blog_arr = array(
     'posts_per_page' => -1, 
     'post_type' => 'post' 
    ); 

    global $sc_user; 
    $authorname = 'max'; 
    $sc_user = get_user_by('login', $authorname); 

    add_filter('posts_join_request','edit_posts_join_request'); 
    add_filter('posts_orderby', 'edit_posts_orderby'); 

    $post_arr = get_posts($blog_arr); 

    remove_filter('posts_join_request','edit_posts_join_request'); 
    remove_filter('posts_orderby', 'edit_posts_orderby'); 

    return $post_arr; 
} 

function edit_posts_join_request($join_request_statement) { 
    $join_request_statement .= "join wp_users ON wp_posts.post_author = wp_users.ID"; 
    return $join_request_statement; 
} 

function edit_posts_orderby($orderby_statement) { 
    global $sc_user; 
    $orderby_statement = 'CASE WHEN wp_users.user_login = "'.$sc_user->user_login.'" THEN 0 ELSE 1 END, wp_users.user_login'; 
    return $orderby_statement; 
}