我想出了两个解决方案。
Solution 1 - foreach loop and verify each user
这个基于@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";
}
Solution 2 - fancy pants pre_user_query
action
这就是我在找到
pre_user_query
中的操作
WP_User_Query
班如果你过去
post_count
作为您的
orderby
参数,然后一些我自己永远不会想到的奇特的SQL查询碰巧将适当的表连接在一起。所以我所做的就是复制join语句并将其添加到我自己的语句中。如果我可以在添加它之前先检查它的存在,这会更好。。。也许我将来会使用字符串匹配。但现在,因为我是设置查询的人,我知道它不在那里,我只是暂时不担心它。所以代码是这样的:
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