カスタムフィールドで投稿した項目ごとに別ページでまとめて表示する方法

みなさんこんばんは!
今回はカスタムフィールドを使用した投稿した、投稿内容の項目ごとに別ページでまとめて表示させる方法を
ご紹介していきたいと思います。

もしかするとここで紹介する方法よりももっとスマートな方法があるかもしれませんので
アドバイスいただける方いればコメント欄におねがいします。

とりあえずは私の方法でも実現できますので備忘録的な感じで残しておおこうと思います。

ここでは、塾の個人ごとの成績をカスタムフィールドの項目の軸として考えます。
そのため、『各個人成績一覧』というカスタム投稿タイプをたてて、
その中でAさんの国語、数学、社会、化学の成績結果を表示します。

他の軸として、各教科の成績一覧ページを作成していきます。
ちなみに私は今回スマートカスタムフィールドフィールドをWPのプラグインで使用しましたので
投稿タイプの作成方法は通常のスマートカスタムフィールドと同じ方法で作成してください。
ここでは割愛させていただきます。

まず、作成しておくこととして、

各教科の一覧ページを固定ページで作成しておきます。

国語という固定ページ
数学という固定ページ
社会という固定ページ
化学という固定ページ

で、上記の固定ページにはpage-record.php(recordは仮)という形でテンプレートを
作成し、当てておいてください。

page-record.phpには以下のソースを記載します。

<?php
if(get_the_title() == "国語"){ $subject = 'record1'; }
elseif(get_the_title() == "数学"){ $subject = 'record2'; }
elseif(get_the_title() == "社会"){ $subject = 'record3'; }
elseif(get_the_title() == "化学"){ $subject = 'record4'; }
;?>

上記はどういうことかというと、『get_the_title() == “数学”』固定ページが数学だった場合、
「$subject」というキーに『record2』を格納する、という指示です。

ちなみにrecord1~4はカスタムフィールドに投稿を行う際に国語や数学に付けた”名前”もしくは”ラベル”です。
ここは合わせて設定してください。

次に、通常のカスタム投稿を表示する場合とことなる記述方法をかいていきます。

<?php
	global $wp_query;
	$args = array(
		'post_type' => 'person_record'//カスタム投稿タイプ名,
		'orderby' => 'date',//並び順は投稿順
		'posts_per_page' => -1,//全件表示 10件の場合は10に変更
		'meta_query' => array(
			array(
				'key' => $subject,//keyを指定
				'value' => '',//値は空
				'compare' => '!='//一致するものがない場合に指定
			),
		),
	);
	query_posts( $args );

	if ( have_posts() ): while ( have_posts() ): the_post();
	?>

上記についてはコピーして、カスタム投稿タイプの名前などを変えてあげたほうが早いと思います。

あとは、通常のスマートカスタムフィールドを吐き出す方法と一緒です。

<?php 
		$name		= 	SCF::get('name');
		$recordtxt	=	SCF::get($subject);
?>
        <article class="list">
				
					<div class="record\txt">
						<?php  echo get_post_meta($post->ID, 'recordtxt', true); ?>
					</div>
					<h4><?php  echo get_post_meta($post->ID, 'name', true); ?></h4>
		</article>

<?php endwhile;endif; ?>

ソースは適宜変更してくださいね。

ちなみに、1つのページに2つの教科を表示させたい場合は以下のような形に変更します。

<?php
if(get_the_title() == "国語"){ $subject = 'record1'; $subject2 = 'record2';} //国語と数学
elseif(get_the_title() == "数学"){ $subject = 'record2'; $subject2 = 'record3';}//数学と社会
elseif(get_the_title() == "社会"){ $subject = 'record3'; $subject2 = 'record4';}//社会と科学
elseif(get_the_title() == "化学"){ $subject = 'record4'; $subject2 = 'record1';}//科学と国語
;?>

<?php
	global $wp_query;
	$args = array(
		'post_type' => array('person_record'),
		'orderby' => 'date',
		'posts_per_page' => -1,
		'meta_query' => array(
			array(
				'key' => $subject,
				'value' => '',
				'compare' => '!=',
			),
			array(
				'key' => $subject2,
				'value' => '',
				'compare' => '!=',
			),
			'relation'=>'OR'
		),
	);
	query_posts( $args );

	if ( have_posts() ): while ( have_posts() ): the_post();
	?>
<?php 
		$name		= 	SCF::get('name');
		$recordtxt	=	SCF::get($subject);
		$recordtxt2	=	SCF::get($subject2);
?>
        <article class="list">
				
					<div class="record\txt">
						<?php  echo get_post_meta($post->ID, 'recordtxt', true); ?>
						<?php  echo get_post_meta($post->ID, 'recordtxt2', true); ?>
					</div>
					<h4><?php  echo get_post_meta($post->ID, 'name', true); ?></h4>
		</article>

<?php endwhile;endif; ?>

これで解決です!

ぜひみなさんも試してみてください(*’V’*)