1

I would like to sort authors by specific name.

This is my code:

$authorname = 'max';

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

$post_arr = get_posts($blog_arr);

Unfortunately WordPress filters my orderby in the core.

This answers also does not help: SQL Server - Order by case , Ordering by specific field value first, How do I return rows with a specific value first?

Thank you for help. Best regards

Community
  • 1
  • 1
Flash01
  • 82
  • 1
  • 7
  • $authorname = 'max'; $blog_arr = array( 'posts_per_page' => -1, 'post_type' => 'post', 'orderby' => '(author = "'.$authorname.'"),'desc' ); $post_arr = get_posts($blog_arr); – R.K.Bhardwaj Sep 19 '16 at 10:07

1 Answers1

0

I have found a working solution:

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;
}
Flash01
  • 82
  • 1
  • 7