Vâng, tôi đã đưa ra 2 giải pháp.
Giải pháp 1 - vòng lặp foreach và xác minh từng người dùng
Công cụ này dựa trên giải pháp của @ GhostToast, nhưng với các chức năng WordPress được cập nhật
//new query with default args
$author_query = new WP_User_Query();
// Get the results
$authors = $author_query->get_results();
if( $authors ) {
foreach( $authors as $author ) {
if ( count_user_posts( $author->id ) >= 1 ) {
echo $author->display_name . '</br>';
}
}
} else {
echo "no users found";
}
Giải pháp 2 - pre_user_query
hành động quần lạ mắt
Đây là những gì tôi đã nghĩ đến khi tôi đăng câu hỏi của mình khi tôi tìm thấy pre_user_query
hành động trong WP_User_Query
lớp. Nếu bạn truyền vào post_count
như orderby
tham số của mình thì một số truy vấn SQL ưa thích mà tôi không bao giờ có thể tự mình tìm ra để tham gia các bảng thích hợp với nhau. Vì vậy, những gì tôi đã làm là sao chép tuyên bố tham gia đó và thêm nó vào chính tôi. Điều này sẽ tốt hơn nếu tôi có thể kiểm tra sự hiện diện của nó trước khi thêm nó ... có lẽ tôi sẽ sử dụng một chuỗi khớp trong tương lai. Nhưng bây giờ vì tôi là người thiết lập truy vấn mà tôi biết nó không có ở đó và tôi vẫn chưa lo lắng về nó. Vì vậy, mã hóa ra như vậy:
function authors_with_posts( $query ) {
if ( isset( $query->query_vars['query_id'] ) && 'authors_with_posts' == $query->query_vars['query_id'] ) {
$query->query_from = $query->query_from . ' LEFT OUTER JOIN (
SELECT post_author, COUNT(*) as post_count
FROM wp_posts
WHERE post_type = "post" AND (post_status = "publish" OR post_status = "private")
GROUP BY post_author
) p ON (wp_users.ID = p.post_author)';
$query->query_where = $query->query_where . ' AND post_count > 0 ';
}
}
add_action('pre_user_query','authors_with_posts');
và sau đó sử dụng nó
$args = ( array( 'query_id' => 'authors_with_posts' ) );
$author_query = new WP_User_Query( $args );
Ý tưởng cho một query_id
tham số là từ Giới thiệu về WP_User_Class
Đó cũng chỉ là một tài liệu tham khảo rất tốt về WP_User_Query
post_count
== 0?