count_many_users_posts()
は、複数のユーザーに対して、それぞれの投稿数(投稿タイプごと)を一括で取得するための WordPress 関数です。
大量のユーザーに対して count_user_posts()
を繰り返すよりも効率的に集計ができるため、管理画面などでの一覧表示に適しています。
目次
基本構文
count_many_users_posts( array $users, string $post_type = 'post', bool $public_only = false );
この関数は、指定した複数ユーザーの投稿数を配列で返します。
引き数と戻り値
引数 | 型 | 説明 |
---|---|---|
$users | array | 投稿数を調べたいユーザーIDの配列 |
$post_type | string | 対象とする投稿タイプ(デフォルトは 'post' ) |
$public_only | bool | 公開済みの投稿のみをカウントするか(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
まとめ
count_many_users_posts()
は、複数ユーザーの投稿数を効率的に取得できる便利な関数で、管理画面での著者一覧や投稿統計表示などに役立ちます。
パフォーマンスの考慮や結果のキャッシュ利用を前提とすれば、非常に有用な関数です。単一ユーザーには count_user_posts()
、複数には count_many_users_posts()
を使い分けるのが推奨されます。
コメント