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;
}

 

Lại Đình Cường

Tôi làm quen và phát triển WordPress từ năm 2008, cho đến nay thì đã có hơn 13 năm kinh nghiệm, thật không thể tin được. Tôi có đam mê và dành nhiều thời gian làm việc với WordPress mỗi ngày, hiện tại tôi đang phát triển giao diện và plugin cho WordPress.

Nếu bạn đang cần người làm trang web bằng WordPress? Hãy liên hệ với tôi ngay để được tư vấn nhé.