y.o.designers-works

ショートコードとカスタムテンプレートを使用し、関連記事を表…

今見ている記事に関連する記事(同じカテゴリ)を表示する方法ですが
single.phpに直接書き込んでも良いが、ゴチャゴチャするのでカスタムテンプレートを作成し、
ショートコードで呼び出す方法になります。

1:カスタムテンプレートを作成する

例では「related_post.php」というカスタムテンプレートを作成し、
「inc」というフォルダの中に入れた場合です。

related_post.php

<h3>関連記事</h3>
<?php
$categories = get_the_category($post->ID);
$category_ID = array();
foreach($categories as $category):
  array_push( $category_ID, $category -> cat_ID);
endforeach ;
$args = array(
  'post__not_in' => array($post -> ID),
  'posts_per_page'=> 6, //取得する記事の数
  'category__in' => $category_ID, //同じカテゴリの記事を取得する
  //'orderby' => 'rand',コメントアウトを外すとランダム表示
);
$query = new WP_Query($args);
if( $query -> have_posts() ):
while ($query -> have_posts()) : $query -> the_post(); ?>

<!--ここは自由に体裁を整えてください。-->
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a><!--サムネイルを表示-->
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><!--タイトルを表示-->
<?php echo mb_substr(strip_tags($post->post_content), 0, 20);  //この場合20文字を抜粋?><!--抜粋文を表示-->
<a href="<?php the_permalink(); ?>">記事を読む</a><!--記事を読む、続きはコチラなどの文言-->
<!--//ここは自由に体裁を整えてください。-->

<?php endwhile; endif; wp_reset_postdata(); ?><!--忘れずにリセットする-->

2:ショートコードの設定

functions.php

<?php function related_post() {
  ob_start();
  get_template_part('inc/related_post');  //この場合有効にしているテーマの"inc"というフォルダのrelated_post.phpを読み込む
  return ob_get_clean();
}
add_shortcode('related_post', 'related_post'); //第一引数にショートコード名、第二引数に関数名を指定

?>

3:ショートコードの呼び出し

single.php

<?php echo do_shortcode('[related_post]'); ?>

コピーして使うときは大かっこを半角に直してください。

参考にさせて頂いたサイト

スポンサーリンク

他にオススメな記事