Ну я придумав 2 рішення.
Рішення 1 - цикл foreach та перевірка кожного користувача
Цей варіант базується на рішенні @ GhostToast, але з оновленими функціями WordPress
//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";
}
Рішення 2 - модні pre_user_query
дії штанів
Це те, про що я думав, коли розміщував своє запитання, коли знайшов pre_user_query
дію в WP_User_Query
класі. Якщо ви вводите post_count
як свій orderby
параметр, то деякі фантазійні запити SQL, які я ніколи не зрозумів, самостійно трапляються разом приєднати правильні таблиці. Тому я скопіював цю заяву про приєднання та додав її до власної. Було б краще, якби я міг би спочатку перевірити його наявність перед тим, як додати його ... можливо, я буду використовувати відповідність рядків у майбутньому. Але поки я один, хто налаштовує запит, я знаю, що його немає, і я просто не переймаюся цим питанням. Отже, код вийшов так:
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');
а потім використовувати його
$args = ( array( 'query_id' => 'authors_with_posts' ) );
$author_query = new WP_User_Query( $args );
Ідея query_id
параметра є від Вступу до WP_User_Class
Що також є дуже хорошим посиланням на WP_User_Query
post_count
== 0?