Hàm lấy user theo số lượng bài viết sử dụng $wpdb

Truy vấn người dùng theo số lượng bài viết, sắp xếp từ cao đến thấp, có thể tìm kiếm theo display_name hoặc user_login.

public function get_users_by_post_count( $post_type = 'post', $number = 5, $search = '', $role = 'agent' ) {
    global $wpdb;

    $sql = "SELECT {$wpdb->users}.ID, p.post_count FROM {$wpdb->users}";
    $sql .= " 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";

    if ( ! empty( $search ) ) {
        $sql .= " WHERE {$wpdb->users}.display_name LIKE '%" . $search . "%' OR {$wpdb->users}.user_login LIKE '%" . $search . "%'";
    }

    $sql .= " ORDER BY p.post_count DESC";

    $users = $wpdb->get_results( $wpdb->prepare( $sql, $post_type ) );

    if ( ! empty( $role ) ) {
        $lists = array();

        foreach ( $users as $obj ) {
            $user = get_user_by( 'id', $obj->ID );

            if ( $user instanceof WP_User ) {
                if ( in_array( $role, $user->roles ) ) {
                    $lists[] = $user;
                }
            }
        }

        $users = $lists;
    }

    if ( HT()->is_positive_number( $number ) ) {
        $users = array_slice( $users, 0, $number );
    }

    return $users;
}

 

Không có bình luận.

Bạn có thể trở thành người đầu tiên để lại bình luận.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *