
複数ユーザーが記事を投稿するサイトを運営中。
最低でも月1で投稿してほしいんだけど、投稿していない人はどうやって探そう?
まだ投稿していない人をパッと見つける方法を知りたい。
一覧で確認できれば、ユーザーに投稿してよ!ってアラートしやすいですよね。
限定的なケースかも?しれませんが、
未投稿者を抽出してリスト化&人数を出力する方法をご紹介します。
STEP1.リスト用の固定ページを作成
固定ページを作成してください。本文は空でOKです。
スラッグ名はSTEP2と3で使用します。

STEP2.page-スラッグ名.phpを作成
page-STEP1でつけたスラッグ名.phpを作ってください。
今回の場合は、page-nopostuser.phpになります。

作成したpage-スラッグ名.phpの中に下記コードをコピペ。
<?php get_header(); ?>
<table><tbody><tr>
<th>ユーザー</th>
<th>メールアドレス</th>
</tr>
<?php $users = get_users('orderby=user_name&order=DESC&exclude=1,2,3');
//ユーザー数の分だけforeach処理
foreach($users as $user) { $uid = $user->ID;
$l_username = get_user_meta( $uid, 'last_name', true ); //姓
$f_username = get_user_meta( $uid, 'first_name', true ); //名
$usermail = get_user_meta( $uid, 'user_email', true ); //e-mail
//投稿データ
$pcount_args = array(
'author' => $uid,
'post_status' => 'publish', //投稿状態
'post_type' => 'post', //投稿タイプ
'date_query' => array(
array(
'year' => date('Y' , strtotime('+9hour')), //今年
'month' => date('m' , strtotime('+9hour')) //今月
)
)
);
$post_query = new WP_Query( $pcount_args ); ?>
<?php /* Start the Loop */ ?>
<?php if ( $post_query->have_posts() ) { //投稿者がある人の処理 ?>
<?php }else{ ; //投稿がない人の処理 ?>
<tr><td><div>
<?php echo $l_username.' '.$f_username.' さん '; ?>
</div></td>
<td><div>
<?php echo $user->user_email; ?>
</div></td></tr>
<?php } ?>
<?php wp_reset_postdata(); ?>
<?php } ?>
</table>
<?php get_footer(); ?>
今回の場合は、ユーザーID(1,2,3)を除くユーザーの名前順で&今月内の未投稿者数を姓名・メールアドレスでリスト化しました。
6、10~12、16~24行目をいじれば、カスタマイズ可能です!
6行目のget_usersで、ユーザーを取得できます。
10~12行目のget_user_metaで、ユーザーのデータ(名前など)を取得できます。
16~24行目のWP_Queryのパラメータをいじることで、投稿を取得できます。
STEP3.未投稿者の人数を出力

表示したいところに下記コードをコピペ。↑画像のリンク箇所にあたるので、最後から2行目のnopostuserにはSTEP1のスラッグ名を入れてください。
※2行目・5~13行目の内容は、STEP2内のコードと合わせること!
合わせないと人数に齟齬が出るので注意。
<?php
$users = get_users('orderby=user_name&order=DESC&exclude=1,2,3');
$n = 0;
foreach($users as $user) { $uid = $user->ID;
$pcount_args = array(
'author' => $uid,
'post_status' => 'publish',
'post_type' => 'post',
'date_query' => array(
array(
'year' => date('Y' , strtotime('+9hour')),
'month' => date('m' , strtotime('+9hour'))
)
)
);
$post_query = new WP_Query( $pcount_args );
$p_cnt = count($users); ?>
<?php if ( $post_query->have_posts() ) { ?>
<?php }else{
++$n;
}
} ?>
<?php echo '<a href="/nopostuser/">未投稿ユーザー('.$n.')</a>'; ?>
<?php wp_reset_postdata(); ?>
~完成形~
未投稿者がいない場合
リンクは、未投稿ユーザー(0)となり、
リンク先は↓のような形になります。

今回は省略しましたが、~~a href=”/nopostuser?n=’.$n.'”>~~とかにしてGETでnを取得して条件分岐すれば、”未投稿ユーザーはいません”の表示にしたりもできそうですね。
未投稿者がいる場合
リンクは2人なら例えば、未投稿ユーザー(2)となり、
リンク先は↓のような形になります。


投稿者リストを出力するケースは調べると出てくるかもしれません。(今回のコードを改造してもいけるし)
しかしながら、未投稿者をリスト化するとなると少しひねりを感じたので、お困りの方はぜひ。
この記事への質問・コメントはこちら