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.今後
関連記事として、「同一のタグを持つ記事」を表示できているのは良いのだが、表示順は「投稿日の降順」ではなく「人気の記事順」としたいところ。