【WordPress】(掲載ON/OFF付き)カスタムタクソノミ別記事一覧

参考にさせて頂いた記事(ありがとうございます!)

カスタムタクソノミー別記事一覧
カスタム投稿タイプの記事の一覧をカスタムタクソノミごとに表示する – Shinichi Nishikawa’s

カスタムフィールドでの表示切り替え
WordPressでカスタムフィールドの値が入っているか・いないかで表示・非表示をするには | 696graphic
WordPress カスタムフィールド有無条件分岐 – miyalog

記事一覧の仕組み

カスタム投稿タイプ「猫(post_cats)」のカスタムタクソノミー「猫別(tax_neko)」に登録したターム毎「カイト(kaito)、リル(riru)」の記事が、編集画面でカスタムフィールドで作った「掲載する」というチェックボックスにチェックを付けた場合のみ一覧に表示される仕組みです。

猫の記事一覧

カイト
2017/04/10 記事1
2017/03/31 記事2
リル
2017/04/06 記事4
2017/02/28 記事5

準備

  • プラグイン「Custom Field Template」で以下登録
    猫一覧」への掲載
    カスタムポストタイプ:post_cats
    テンプレートコンテンツ:
    [List]
    type = checkbox
    value = 掲載する
    ※カスタム投稿タイプ「猫」の記事作成画面だけにチェックボックスが出ます。
  • プラグイン「Custom Post Type UI」でカスタム投稿タイプ「猫(post_cats)」を作り、カスタムタクソノミー「猫別(tax_neko)」を付けておく。
  • カスタムタクソノミー「猫別(tax_neko)」に「カイト(kaito)」「リル(riru)」を登録
    ※()内はスラッグ

記事一覧

テンプレートファイルに直接書く場合

<dl>
<?php
	$catargs = array('taxonomy' => 'tax_bugreport');
	$catlists = get_categories( $catargs );
	foreach($catlists as $cat) :
?>
<dt><?php echo $cat->name; ?></dt>
<?php
$args = array(
	'post_type' => 'tp_bugreport',
	'tax_bugreport' => $cat->slug
);
$my_posts = get_posts( $args );
if ( $my_posts ) {
	foreach ( $my_posts as $post ) :
		setup_postdata( $post );
		
		$ctm = get_post_meta($post->ID, 'bugList', true);
		if(empty($ctm)):
		?>
		<dd>※現在、「<?php echo $cat->name ?>」に掲載する報告はありません。</dd>
		<?php else: ?>
		<dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd>
		<?php
		endif;
		endforeach;
		}
	wp_reset_postdata();
	?>
<?php endforeach; ?>
</dl>

functions.phpに書く場合

※ショートコード[nekoList]で読み込む。

function getNekoNeko() {
	global $post;
	$oldcat = $cat;
	$oldpost = $post;
	$retHtml.='<dl>';
	$catargs = array('taxonomy' => 'tax_neko');
	$myposts = get_categories( $catargs );
	foreach($myposts as $cat) :
	$retHtml.='<dt>'.$cat->name.'</dt>';
	$args = array(
		'post_type' => 'post_cats',
		'tax_neko' => $cat->slug
	);
	$my_posts = get_posts( $args );
	if ( $my_posts ) {
		foreach ( $my_posts as $post ) :
		setup_postdata( $post );
		
		//カスタムフィールドでの条件分岐
		$ctm = get_post_meta($post->ID, 'List', true);
		if(empty($ctm))://「掲載する」にチェックが付いた記事が無ければ以下表示
		$retHtml.='<dd>※現在、「'.$cat->name.'」に関する記事はありません。</dd>';
		else://「掲載する」にチェックが付いた記事があれば以下表示
		$retHtml.='<dd>.get_post_time('Y/m/d')&nbsp;<a href="'.get_permalink().'">'.the_title("","",false).'</a></dd>';
		endif;
		endforeach;
	}
	endforeach;
	wp_reset_postdata();
	$retHtml.='</dl>';
	$post = $oldpost;
	return $retHtml;
}
add_shortcode("nekoList", "getNekoNeko");

おまけ

カスタムタクソノミー別に記事を分ける前は、カスタムタクソノミーで記事一覧への表示/非表示を切り替えていたのでその時のfunctions.phpに書いていたものはこれです。

また使う機会もあるだろうからストックとして保存。
カスタムタクソノミーに「一覧に表示(onlist)」を登録して、チェックが付いていたら一覧に表示していました。

function getNekoNeko() {
	global $post;
	$oldpost = $post;
	$myposts = query_posts(
		array(
		'posts_per_page' => '-1',
		'post_type'		=> 'post_cats',
		'tax_query'	=> array(
		'relation'	=> 'AND',
		array(
                'taxonomy' => 'tax_neko',
				'terms' => 'onlist',
				'field' => 'slug',
				'operator' => 'IN')
	)));
	if(have_posts()):
	$retHtml='';
	$retHtml.='<ul>';
	foreach($myposts as $post) :
	setup_postdata($post);
	$retHtml.='<li>'.get_post_time('(Y/m/d)').'&nbsp;<a href="'.get_permalink().'">'.the_title("","",false).'</li>';
	endforeach;
	$retHtml.='</ul>';
	wp_reset_query();
	$post = $oldpost;
	return $retHtml;
	endif;
}
add_shortcode("nekoList", "getNekoNeko");

Comments

コメントを残す