WordPressの投稿にはカテゴリーやタグがありますが、固定ページにはありません。 ですが、ページごとにカテゴリーを設定して表示を切り分けたいときがあります。(サイドバーにカテゴリーごとのページへのリンクを載せたりとか)

そういった場合はカスタムフィールドにカテゴリー用の値を設定することで、その値をもとにしてページを絞り込んで取得、表示することができます。

カスタムフィールドにカテゴリ用の値を設定

カスタムフィールドとは投稿や固定ページに任意のキーと値を設定するための仕組みです。 付加したメタデータはテーマファイルの中で利用することができます。

カスタムフィールド入力欄が表示されていない場合は、投稿編集やページ編集の画面の右上にある表示オプションからカスタムフィールドにチェックを入れて表示されます。

今回はページのカテゴリーを設定するので、キーはpage_categoryとします。(もちろんこの値でなくても構いません) 値にはそのページのカテゴリー名を入力します。

例として、以下のようにページにカスタムフィールドを設定したとします。

ページ カスタムフィールドのキー カスタムフィールドの値
柴犬 page_category dog
サモエド page_category dog
アメリカンショートヘア page_category cat
シベリアンハスキー page_category dog
マンチカン page_category cat

WP_Queryを使ってページの情報を取得

カテゴリーを設定したページ情報を取得、表示するためにWP_Queryクラスを使います。 WP_Queryは固定ページだけでなく投稿の情報も取得できる汎用的なクラスなのですが、今回は詳細な説明は省きます。

このWP_Queryを使って、カスタムフィールドの値をもとにページを絞り込みます。

カスタムフィールドのキーがpage_category、値がdogの固定ページへのリンクのリストを表示したい場合、以下のようなコードになります。

$query = array(
	'post_type' => 'page', // 固定ページを引っ張りたいのでpage(投稿ならpost)
	'meta_key' => 'page_category', // カスタムフィールドのキー
	'meta_value' => 'dog', // カスタムフィールドの値
);
$wp_query = new WP_Query($query);

$str = '';
if ($wp_query->have_posts()) {
	while ($wp_query->have_posts()) {
		$wp_query->the_post();
		$str .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
	}
}
echo $str;

$query配列に絞り込む条件を指定してWP_Queryに渡し、$wp_query->the_post();で一件ずつページ情報を読みだして表示しています。 上記ではget_permalink()でURL、get_title()でタイトルを取得していますが、本文を取得するget_content()など、投稿情報、ページ情報を取得、出力する関数は全て使えます。

上記コードをテンプレートの任意の場所に書いても構いませんが、何度も使うのであればコード本体をfunctions.phpに追記して関数を呼び出す形にした方が修正もしやすく便利です。

functions.phpに追記

function pageList($meta_key, $meta_value)
{
	$query = array(
		'post_type' => 'page',
		'meta_key' => $meta_key,
		'meta_value' => $meta_value,
	);
	$wp_query = new WP_Query($query);

	$str = '';
	if ($wp_query->have_posts()) {
		while ($wp_query->have_posts()) {
			$wp_query->the_post();
			$str .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
		}
	}
	echo $str;

	wp_reset_query();
}

テンプレートから呼び出す

//page_categoryがdogの固定ページのリスト
pageList('page_category', 'dog');

//page_categoryがcatの固定ページのリスト
pageList('page_category', 'cat');

今回はWP_Queryを「固定ページで擬似的にカテゴリーを使う」ためにカスタムフィールドのキーと値で絞る使い方をしていますが、他にも「最近の投稿を5件取得したい」のような場合にも使うことができます。

最近の投稿を5件取得する

function recentPosts()
{
	$query = array(
		'post_type' => 'post',
		'showposts' => 5,
	);
	$wp_query = new WP_Query($query);

	$str = '';
	if ($wp_query->have_posts()) {
		while ($wp_query->have_posts()) {
			$wp_query->the_post();
			$str .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
		}
	}
	echo $str;

	wp_reset_query();
}

WP_Queryに渡せる他のパラメータについては、↓あたりが参考になります。(リンク先はquery_postsだが、渡せるパラメータは同じ)

query_posts:WordPress私的マニュアル