Eh bien, j'ai trouvé 2 solutions.
Solution 1 - foreach boucle et vérifier chaque utilisateur
Celui-ci est basé sur la solution de @ GhostToast, mais avec des fonctions WordPress mises à jour
//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";
}
Solution 2 - pre_user_query
Action de pantalon fantaisie
C'est à cela que je pensais quand j'ai posté ma question une fois que j'ai trouvé l' pre_user_query
action en WP_User_Query
classe. Si vous passez en post_count
tant que orderby
paramètre, alors certaines requêtes SQL fantaisistes que je n'aurais jamais imaginées moi-même arrivent à joindre les tables appropriées. J'ai donc copié cette déclaration de jointure et l'ajoutée à la mienne. Ce serait mieux si je pouvais d'abord vérifier sa présence avant de l'ajouter ... peut-être que j'utiliserai une correspondance de chaîne à l'avenir. Mais pour l'instant puisque c'est moi qui configure la requête, je sais qu'elle n'est pas là et je ne m'en inquiéterai pas encore. Donc, le code s'est avéré comme suit:
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');
puis de l'utiliser
$args = ( array( 'query_id' => 'authors_with_posts' ) );
$author_query = new WP_User_Query( $args );
L'idée d'un query_id
paramètre est tirée d'une introduction à WP_User_Class
Ce qui est aussi juste une très bonne référence sur WP_User_Query
post_count
== 0?