6

The default WordPress function get_users('orderby=post_count'); only orders users with the count of the posts they've made.

Any idea how to modify this to support custom post types as well?

UPDATE:

I only want to query posts of type "company-item". Currently, this snippet is in my functions.php:

 function user_query_count_post_type($args) {
   $args->query_from = str_replace("post_type = post AND", "post_type IN ('company-item') AND ", $args->query_from);
  }

And this is in my page template:

<ul>
  <?php
  add_action('pre_user_query','user_query_count_post_type');
  $showrooms = get_users('orderby=post_count&role=company&order=desc');
  remove_action('pre_user_query','user_query_count_post_type');

  foreach ($showrooms as $showroom) : ?>
    <li>
        <a href="<?php echo get_author_posts_url( $showroom->id ); ?>" ><img src="<?php echo $showroom->company_logo; ?>" title="<?php echo $showroom->company_name; ?>" /></a>
    </li>

  <?php endforeach; ?>
</ul>
1

you can try to replace the where clause of the query by hooking to pre_user_query. Something like:

function user_query_count_post_type($args){
    $args->query_from = str_replace("post_type = post AND", "post_type IN ('post','cpt') AND ", $args->query_from);
}

Usage ex:

add_action('pre_user_query','user_query_count_post_type');
$users = get_users('orderby=post_count');
remove_action('pre_user_query','user_query_count_post_type');
  • Tried that, but getting the error Fatal error: Cannot use object of type WP_User_Query as array – Hassan Feb 13 '13 at 21:54
  • @Hassan, my bad , i think i fixed it. – Bainternet Feb 13 '13 at 22:28
  • this still does not work. Do I need to modify anything in the code? – Hassan Feb 14 '13 at 4:28
  • @Hassan yeah you need to modify cpt with the name of your custom post type . – Bainternet Feb 14 '13 at 8:17
  • 1
    str_replace("post_type = post AND" ... , should be str_replace("post_type = 'post' AND " ... then it will work, note the ' around post and the space after AND – Tim Jan 6 '15 at 1:43
0

A bit late but, just in case someone needs it on the future. You could add a get_posts inside the normal foreach for users, to check if a given user has stuff published on posts, OR on the CPT you want:

if ( ! function_exists( 'contributors_author_list' ) ) :

function contributors_author_list() {

    $contributor_ids = get_users( array(
        'fields'  => 'ID',
        'orderby' => 'post_count',
        'order'   => 'DESC',
        'who'     => 'authors',
        'number' => '100'
    ) );

    foreach ( $contributor_ids as $contributor_id ) :

        $argos = array( 'author' => $contributor_id, 'post_type'=> array('post','CHANGE-HERE-YOUR-CPT') ); //change here the CPT
        $userposts = get_posts($argos);
        $count=count($userposts);
        if ($count) {
    ?>

<!-- HTML stuff -->    

    <?php    
        }
    endforeach;
}
endif;

This way you should be able to display authors who published either posts or Custom Post Types (or both).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.