最近、WordPressで新着情報を作成する場合、カスタム投稿タイプを使用することが多いです。
その際に、「お客様の方でトップページに表示される新着情報の表示件数を変更したい」というご要望を頂きました。
その際の設定方法をメモしておきます。

仕様前提

  • トップページに新着情報を件数指定で表示したい
  • 新着情報はカスタム投稿タイプで作成
  • 新着情報以外にもカスタム投稿タイプで作成した記事のリストがトップページに表示される
  • お客様にはテンプレートを触ってもらえない(貰わない)

設定方法

トップページの表示操作用の固定ページ「トップページ」を作成

私は、今回に限らず、トップページの設定操作用に「トップページ」という固定ページを作成することが多いです。
その固定ページにて、title、keywords、descriptionを設定できるようにしたり、またスライドがある場合はスライド表示の操作設定ができるようにしたりしています。
トップページでお客様側で操作できる事をまとめると分かりやすくて便利と考えています。
今回もこの固定ページ「トップページ」にて、新着情報の表示件数を操作できるように設定します。

※固定ページ「トップページ」には、固定ページのテンプレートにて、検索エンジンに表示されないように、以下の設定を加えています。

<meta name="robots" content="noindex">

カスタムフィールド「新着情報の表示件数」を作成

新着情報の表示件数を操作するカスタムフィールドを作成します。
今回は以下のように設定しました。

フィールドラベル 新着情報の表示件数
フィールド名 top-news-number
フィールドタイプ セレクトボックス
フィールド記入のヒント 新着情報の表示件数を指定してください。
選択し 1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
6 : 6
7 : 7
8 : 8
9 : 9
10 : 10
デフォルト値 5 : 05

カスタムフィールドの作成には、「Advanced Custom Fields」プラグインを使用しています。
カスタムフィールド作成画面の「位置」の「ルール」にて、以下のように設定すると、
設定したカスタムフィールドを簡単に特定の固定ページ「トップページ」にだけ表示させることができます。
カスタムフィールドの設定

メインインデックスのテンプレート(index.php)の設定

テンプレートの新着情報を表示させたい場所に以下のように設定します。

<ul>
	<?php
		$top_news_n = get_post_meta(63,'top-news-number',true); // 固定ページ「トップページ」のカスタムフィールドの値を設定(63は固定ページのID)
		$args_news = array(
			'post_type' => array('news'), // カスタム投稿タイプの指定
			'numberposts' => $top_news_n // 表示件数指定
		);
		$myposts_news = get_posts($args_news);
		
		foreach ( $myposts_news as $post ) :
		?>
		<li><a href="<?php the_permalink(); ?>"><span class="date"><?php echo date("Y/m/d", strtotime($post->post_date)); ?></span><span class="tit"><?php the_title(); ?></span></a></li>
	<?php endforeach; ?>
	<?php wp_reset_postdata(); ?>
</ul>

以上の設定で、固定ページ「トップページ」より、新着情報の表示件数を簡単に変更できます。