2 çözüm buldum.
Çözüm 1 - Her döngüyü önleyin ve her kullanıcıyı doğrulayın
Bu, @ GhostToast'ın çözümüne dayanmaktadır, ancak güncellenmiş WordPress işlevleriyle
//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";
}
Çözüm 2 - Süslü Pantolon pre_user_query
Eylem
Sınıfta bir pre_user_query
eylem bulduğumda sorumu gönderdiğimde böyle düşünüyordum WP_User_Query
. Eğer parametre post_count
olarak geçerseniz orderby
o zaman ben asla kendi başıma anlamaya olurdu bazı fantezi SQL sorgulama birlikte uygun tablolara katılmak olur. Yani yaptığım şey bu birleştirme ifadesini kopyalayıp kendime eklemekti. Eğer eklemeden önce varlığını kontrol edebilseydim bu daha iyi olurdu ... belki gelecekte bir dize eşleşmesi kullanacağım. Ama şimdilik ben sorguyu kurma biri olduğumdan beri orada olmadığını biliyorum ve henüz bu konuda endişelenmeyeceğim. Böylece kod şöyle çıktı:
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');
ve sonra kullanmak için
$args = ( array( 'query_id' => 'authors_with_posts' ) );
$author_query = new WP_User_Query( $args );
query_id
Parametre fikri WP_User_Class'a Giriş'ten
Bu da sadece çok iyi bir referans. WP_User_Query
post_count
== 0 olan kullanıcılardan, sonuçlardan basitçe vazgeçmek daha az vergi ister mi ?