さて私は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のユーザー