ページスラッグとカテゴリースラッグが一致した投稿記事一覧を表示する方法
2021/10/25
お仕事でwordpressサイトを構築していて、過去に何度か「各施設紹介のページに、その施設の担当者が投稿したブログ記事のみを一覧で表示させて欲しい」と言う要望を受けたことがあります。今回はそのコードの備忘録。
各施設の担当者が投稿時に自分の施設をカテゴリー一覧から選択し、そのカテゴリースラッグ(タームスラッグ)が各施設ページのページスラッグと一致している事が最低限の条件となります。言うまでもないですが、固定ページでは基本的にphpが使えないので、固定ページテンプレートなどに記述しましょう。
例によって、写真は記事の内容と全く関係のないイメージなので悪しからず。
通常の投稿の場合
<?php
$args = array(
'post_type' => 'post', // 通常の投稿の場合は「post」
'posts_per_page' => '1', //表示件数
'tax_query' => array( array (
'taxonomy' => 'category', // 通常の投稿の場合は「category」
'field' => 'slug', // スラッグが対象
'terms' => esc_attr($post->post_name) // スラッグを取得
))
);
$pageslug_post = get_posts($args);
if($pageslug_post ) : foreach($pageslug_post as $post) : setup_postdata( $post );
?>
ループを記述
<?php endforeach; endif; wp_reset_postdata(); ?>
カスタム投稿ではなく通常の投稿の場合は「post_type」を「post」に「taxonomy」を「category」にします。
カスタム投稿の場合
<?php
$args = array(
'post_type' => 'custom_post', // 投稿タイプスラッグ
'posts_per_page' => '1', //表示件数
'tax_query' => array( array (
'taxonomy' => 'custom_post_cat', // タクソノミースラッグ
'field' => 'slug', // スラッグが対象
'terms' => esc_attr($post->post_name) // スラッグを取得
))
);
$pageslug_post = get_posts($args);
if($pageslug_post ) : foreach($pageslug_post as $post) : setup_postdata( $post ); ?>
ループを記述
<?php endforeach; ?>
<?php endif; wp_reset_postdata(); ?>
カスタム投稿の場合は「post_type」をカスタム投稿の投稿タイプスラッグに、「taxonomy」をタクソノミースラッグにします。