K4750.NET

WordPressにて関連記事をプラグインを使わずに表示させる

個別記事のページにて、その記事の関連記事(ここでは、同一のタグを持つ記事とする)をプラグインを使わずに表示させた際のメモ。


1.ソースコード

タグ構成やクラス指定は本サイト独自のやり方に従う(panel、list-group等はBootstrap用のもの)。

<?php
$related_posts = get_posts(array(
  'numberposts' => 10, 'tag__in' => wp_get_post_tags(get_the_ID(), 'fields=ids'),
  'post__not_in' => array(get_the_ID()), 'orderby' => 'date', 'order' => 'DESC'));
if ($related_posts) {
?>

<aside>
 <section class="related-posts">
  <div class="panel panel-default">
   <div class="panel-heading">関連記事</div>
   <div class="list-group">
    <?php foreach($related_posts as $p) {?>
     <a class="list-group-item" href="<?php echo get_permalink($p->ID);?>">
      <small><?php echo $p->post_title;?></small>
      <div class="pull-right"><small class="text-muted"><?php echo mysql2date('Y-m-d', $p->post_date);?></small></div>
     </a>
    <?php } ?>
   </div>
  </div>
 </section>
</aside>

<?php }?>

2.解説

<?php
$related_posts = get_posts(array(
  'numberposts' => 10, 'tag__in' => wp_get_post_tags(get_the_ID(), 'fields=ids'),
  'post__not_in' => array(get_the_ID()), 'orderby' => 'date', 'order' => 'DESC'));
if ($related_posts) {
?>

関連記事のリストを取得(get_posts)している。取得する記事は、最大10件(numberposts)、記事(get_the_ID())のタグ(wp_get_post_tags)と同一のタグを持つ(tag__in)。ただし、記事自身を含まず(post__not_in)。表示順(orderby、order)は、記事の投稿日の降順(新しい記事から古い記事の順)とする。

    <?php foreach($related_posts as $p) {?>
     <a class="list-group-item" href="<?php echo get_permalink($p->ID);?>">
      <small><?php echo $p->post_title;?></small>
      <div class="pull-right"><small class="text-muted"><?php echo mysql2date('Y-m-d', $p->post_date);?></small></div>
     </a>
    <?php } ?>

関連記事の数分繰り返して(foreach)表示する。表示/出力する内容は、記事のリンク先(get_permalink)、記事のタイトル($p->post_title)、記事の投稿日($p->post_date)。記事の投稿日はmysql書式と呼ばれる書式で格納されているので、関数(mysql2date)を使用して見やすい書式('Y-m-d')へ変換する。


3.今後

関連記事として、「同一のタグを持つ記事」を表示できているのは良いのだが、表示順は「投稿日の降順」ではなく「人気の記事順」としたいところ。