記事未投稿のユーザーを出力する方法

つくってみた
つくってみた
この記事は約6分で読めます。

複数ユーザーが記事を投稿するサイトを運営中。
最低でも月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で、ユーザーを取得できます。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_users


10~12行目のget_user_metaで、ユーザーのデータ(名前など)を取得できます。

関数リファレンス/get user meta - WordPress Codex 日本語版

16~24行目のWP_Queryのパラメータをいじることで、投稿を取得できます。

関数リファレンス/WP Query - WordPress Codex 日本語版

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)となり、
リンク先は↓のような形になります。

なよいちゃん
なよいちゃん

投稿者リストを出力するケースは調べると出てくるかもしれません。(今回のコードを改造してもいけるし)

しかしながら、未投稿者をリスト化するとなると少しひねりを感じたので、お困りの方はぜひ。

この記事が気に入ったら、サポートをしてみませんか?
\ ワンコインからのAmazonギフト /

この記事への質問・コメントはこちら

タイトルとURLをコピーしました