WordPressで作られたWebサイトなどでは、複数で記事を書ける(投稿できる)ように「ユーザー」を作成して、運営/管理を行うこともあると思います。
複数で記事を書くスタイル
これは例ですが、下のように「ネコ」「ウサギ」「カタツムリ」「トリ」の4ユーザーが、それぞれ1つのWebサイトで記事を書く、というイメージです。
動物だとわかりにくいな、という場合は「Aさん」「Bさん」「Cさん」「Dさん」というように「人が書いている」と読みかえてください。
ユーザーのことを紹介しよう
複数で記事を書くようなWebサイトでは「『誰』が書いているのか」「『誰』がどれくらいの『記事数』を書いているのか」など、広く知らせたい場合もあると思います。
そんな時は、各ユーザーをまとめて紹介する「ユーザー一覧ページ」を作って、ずらっと見られると便利ですよね。
「ユーザー一覧ページ」を作ろう
というわけで以上が前置きで、以下が本題です。
「カスタム投稿タイプ」に投稿する運用パターン
デフォルトで用意されている「投稿」は、Webサイト全体のメンテナンス情報やニュースリリースを発信する使い方をして「カスタム投稿タイプ」には、複数のユーザーが投稿(今回の例では、ユーザーが好む食べ物を投稿)する、というように「目的別に投稿を分ける」運用パターンって結構あります。
目的別に投稿を分ける運用
上記の場合で「ユーザー一覧ページ」を作るためには、少し工夫が必要でした。
取得できないユーザーがいるぞ・・・
WordPressではユーザーの情報をまとめて取得する方法がいくつかあるのですが「wp_list_authors」や「get_users」を使っても、取得できないユーザーがいました。
少し調べると、上記の2つの関数は「デフォルトで用意されている『投稿』」に対して判別を行って、ユーザー情報を取得しているようです。(認識が間違っていたらすみません)
※「wp_list_authors」に指定できるパラメーターで「hide_empty」を「0」に指定すれば、投稿の有無関係なしにすべてのユーザー情報を取得できますが、それだと関係ないユーザーまで表示されてしまうので、やりたいことと違うな~という感じです。
ですので、例えば「『カスタム投稿タイプ』にたくさん投稿していてもユーザー一覧ページには表示されないユーザーがいる」という状態です。
これは望んでいない・・・
WP_User_Queryを使う
「カスタム投稿タイプ」に投稿しているユーザーも、もちろんユーザー一覧ページに表示させたい。
そんな時は「WP_User_Query」を使うとできることを知りました。
例えば、以下のようにパラメーターを指定します。
$args = array( //publicな投稿タイプの中で、投稿が公開済みになっているユーザー 'has_published_posts' => true ); $user_query = new WP_User_Query( $args );
コードがやっていること
ちょっと説明が下手ですみませんが・・・「WP_User_Query」に指定できるパラメーター「has_published_posts」に「true」を指定すると、publicな投稿タイプ「投稿」「固定ページ」「添付ファイル」「カスタム投稿タイプ(publicなもの)」の中で、投稿が公開済みになっているユーザーの情報をまとめて取得できます。
特定のカスタム投稿タイプのみ判別したい場合はこうする
特定のカスタム投稿タイプのみ判別する場合は、以下のように書けばOKです。
$args = array( //カスタム投稿タイプ「food」で、投稿が公開済みになっているユーザーの情報を取得 'has_published_posts' => array( 'food' ) ); $user_query = new WP_User_Query( $args );
上記の場合は、publicなカスタム投稿タイプ「food」で、投稿が公開済みになっているユーザーの情報をまとめて取得します。
まとめ
ユーザー一覧ページを作る機会は今後もありそうなので、メモ程度に書き残しました。
この方法とあわせて、ユーザーを取得する際に発行されるSQL文をフックを使ってカスタマイズすれば「投稿数の上位ユーザーランキング」とかを作ることもできます。
次回はその件について書きますので、機会がありましたらまた読みに来てください。
このページを共有する