MENU

count_many_users_posts()

count_many_users_posts() は、複数のユーザーに対して、それぞれの投稿数(投稿タイプごと)を一括で取得するための WordPress 関数です。

大量のユーザーに対して count_user_posts() を繰り返すよりも効率的に集計ができるため、管理画面などでの一覧表示に適しています。

目次

基本構文

count_many_users_posts( array $users, string $post_type = 'post', bool $public_only = false );

この関数は、指定した複数ユーザーの投稿数を配列で返します。

引き数と戻り値

引数説明
$usersarray投稿数を調べたいユーザーIDの配列
$post_typestring対象とする投稿タイプ(デフォルトは 'post'
$public_onlybool公開済みの投稿のみをカウントするか(true)または全ステータスを含むか
戻り値説明
連想配列arrayユーザーIDをキー、投稿数を値とする配列が返る

使用例

タグを使った使用例

$user_ids = array(1, 2, 3);
$post_counts = count_many_users_posts( $user_ids );

foreach ( $post_counts as $user_id => $count ) {
    echo "ユーザー {$user_id} の投稿数は {$count} 件です。<br>";
}

このコードでは、ユーザーID 1, 2, 3 の各投稿数を取得して表示しています。

注意点

  • $users に存在しないユーザーIDを含めても、出力される配列にそのIDは含まれません。
  • 投稿ステータスの指定は $public_only でしかできず、下書きや非公開の投稿を個別に指定して取得するには WP_Query などを使う必要があります。
  • パフォーマンス面では多くの count_user_posts() 呼び出しより高速ですが、ユーザー数が多すぎるとクエリ負荷が高くなる可能性があります。

よく一緒に使われる関数

get_users()

$users = get_users( array( 'role' => 'author' ) );
$user_ids = wp_list_pluck( $users, 'ID' );

ユーザーID配列を取得するのに便利です。

count_user_posts()

$count = count_user_posts( 1, 'post', true );

単一ユーザーの投稿数取得に使用。count_many_users_posts() の補完的関数。

wp_list_pluck()

$user_ids = wp_list_pluck( $users, 'ID' );

get_users() などで取得した配列から ID だけを抽出します。

想定されるトラブル

空の配列が返ってくる

指定したユーザーIDに該当する投稿がない、もしくはユーザーが存在しない。

解決方法

get_users() を使って正確なユーザーIDを取得するようにしましょう。

パフォーマンスが悪化する

数百〜数千ユーザーに対してこの関数を頻繁に実行するとDB負荷が高くなる。

解決方法

結果をキャッシュ(transientなど)に保存して必要に応じて更新するようにしましょう。

Q&A

公開投稿以外もカウントできますか?

$public_onlyfalse にすれば、全投稿ステータスの投稿数を取得できます。

投稿タイプをカスタム投稿タイプにできますか?

はい、$post_type'my_custom_post_type' を指定できます。

非存在ユーザーIDを指定するとどうなりますか?

そのユーザーは戻り値の配列に含まれません。

まとめ

count_many_users_posts() は、複数ユーザーの投稿数を効率的に取得できる便利な関数で、管理画面での著者一覧や投稿統計表示などに役立ちます。

パフォーマンスの考慮や結果のキャッシュ利用を前提とすれば、非常に有用な関数です。単一ユーザーには count_user_posts()、複数には count_many_users_posts() を使い分けるのが推奨されます。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次