Bueno, he encontrado 2 soluciones.
Solución 1 - foreach loop y verificar cada usuario
Este se basa en la solución de @ GhostToast, pero con funciones actualizadas de 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";
}
Solución 2 - pre_user_query
acción de pantalones elegantes
Esto es lo que estaba pensando cuando publiqué mi pregunta una vez que encontré la pre_user_query
acción en la WP_User_Query
clase. Si pasa post_count
como su orderby
parámetro, algunas consultas SQL sofisticadas que nunca habría descubierto por mi cuenta suceden las tablas adecuadas. Entonces, lo que hice fue copiar esa declaración de unión y agregarla a la mía. Esto sería mejor si pudiera verificar su presencia primero antes de agregarlo ... tal vez usaré una coincidencia de cadena en el futuro. Pero por ahora, dado que soy yo quien configura la consulta, sé que no está allí y todavía no me preocuparé. Entonces el código resultó así:
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');
y luego usarlo
$args = ( array( 'query_id' => 'authors_with_posts' ) );
$author_query = new WP_User_Query( $args );
La idea para un query_id
parámetro es de Introducción a WP_User_Class
Lo cual también es solo una muy buena referencia sobre WP_User_Query
post_count
== 0?