按发帖数量排序用户

时间:2019-11-03 作者:mems

我正在尝试按post\\u count DESC订购,但custom\\u post\\u类型无效

function post_count_type($role, $number) {
$args = array(
    \'post_type\'     => array( \'custom_post_type\' ),
    \'orderby\'       => \'post_count\',
    \'order\'         => \'DESC\',
    \'role\'          => $role,
    \'number\'        => $number
);
$users = get_users( $args );
$the_query = new WP_Query( $args );
    foreach ($users as $user) {
    echo \'html here...\';
    }}
我的函数适用于post\\u类型:post,但不适用于自定义post\\u类型。对不起,我的英语不好。

1 个回复
最合适的回答,由SO网友:Mindaugas Jakubauskas 整理而成

You are using wrong approach

对于你想要实现的目标,你使用了错误的方法。您对这两者使用相同的参数WP_QueryWP_User_Query (get_users 最终转化为WP_User_Query). 问题是WP_Query 不支持orderby 参数post_count 因为一个职位总是等于一个职位WP_User_Query 不支持post_type 因为用户没有为自己分配帖子类型。

This can\'t be achieved using standard functions

在里面WP_User_Query 它是硬编码的,对于用户帖子计数,它只查找post\\u类型post. 要实现您想要实现的目标,您需要编写一个自定义数据库查询。

A custom solution

实现这一点的独立函数可能如下所示(请注意,我还没有对其进行测试,因此可能存在SQL拼写错误或smth)。

function get_users_by_post_count( $post_type = \'post\' ) {
    global $wpdb;

    $users = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT {$wpdb->users}.ID, p.post_count
            FROM {$wpdb->users}  
            LEFT JOIN (
                SELECT post_author, COUNT(*) AS post_count 
                FROM {$wpdb->posts} WHERE post_type = %s
                GROUP BY post_author
            ) p ON {$wpdb->users}.id = p.post_author 
            ORDER BY p.post_count",
            $post_type
        )
    );

    return $users;
}
要使用它,只需像这样称呼它:

$users = get_users_by_post_count( \'custom_post_type\' );

if ( ! empty( $users ) ) {
   foreach ( $users as $user ) {
       // there you have user ID and post_count
       echo $user->ID . \' has \' . $user->post_count . \' posts\';
    }
}

相关推荐