【wordpress】投稿で同じカテゴリー、タグの記事を関連記事として出力するソース

ワードプレス備忘録

ワードプレスの投稿ページで同じカテゴリーorタグの記事を関連記事として表示するソース

ワードプレスを使って、ブログやカンパニーサイトを作っている場合、投稿記事(カンパニーサイトでは会社インフォメーション等)にカテゴリーやタグを設定すると思いますが、その投稿ページに関連記事として同一カテゴリーやタグの記事を数記事表示させたかったので、備忘録として下記に「同じカテゴリー」「同じタグ」の記事を表示する際のソースを記しておく。
styleのidやclassは当ブログでしているものを適当に書いていますので、ご参考頂ける方は適宜御自身のサイト用に変更してください。

同じカテゴリーの投稿記事を表示する

<?php
$post_id = get_the_ID();
foreach((get_the_category()) as $cat) {
$cat_id = $cat->cat_ID ;
break ;
}
query_posts(
array(
'cat' => $cat_id,
'showposts' => 4, //表示する記事の数
'post__not_in' => array($post_id) //今の記事は含まない
)
);
if(have_posts()) :
?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li class="relation_thumbnail">
<div class="relation-image">
     <a title="<?php the_title(); ?>" href="<?php the_permalink(); ?>">
	 <?php the_post_thumbnail(); ?>
     </a>
</div>
<div class="relation-comment">
<span class="post_tag_<?php echo $cat_slug ?>"><?php echo $cat_name ;?></span>
<a href="<?php the_permalink(); ?>"><h4><?php
if(mb_strlen($post->post_title, 'UTF-8')>60){
	$title= mb_substr($post->post_title, 0, 60, 'UTF-8');
	echo $title.'…';
}else{
	echo $post->post_title;
}
?></h4></a>
</div>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php wp_reset_query(); ?>

基本的にはこちらの同一カテゴリーの記事表示の方をよく使うかと思います。
投稿のタイトルは60文字まで表示、六十文字以内で収まれば、もちろん全文。61文字以上になってしまうと、60文字で切り、後ろに「…」を表示するようにしています。

同じタグの投稿記事を表示する

<?php
$post_id = get_the_ID();
$current_tags =wp_get_post_tags($post_id, array('orderby'=>'name','order'=>'RAND'));//複数タグが登録されているケースもあり、ランダムで取得
if($current_tags){
$current_tag_list = $current_tags[0]->term_id;
$args = array(
	'tag__in' => array($current_tag_list),
	'post__not_in' => array($post_id), //今の記事は含まない
	'posts_per_page' => 8, //表示する記事の数
	'caller_get_posts'=>1,// 取得した記事の何番目から表示するか
 );
$related_posts = new WP_Query( $args );
if( $related_posts->have_posts()){?>
<ul class="front_post_ul">
<?php while($related_posts->have_posts()):$related_posts->the_post(); ?>
<li>
<div class="post_list">
<div class="post_thumbnail">	
<a title="<?php the_title(); ?>" href="<?php the_permalink(); ?>">
<?php
if (has_post_thumbnail()) {
  the_post_thumbnail();
}else {
}
?>
</a>
</div><!-- thumbnail -->
<div class="column_comment">
<a class="firstcolumn_link" href="<?php the_permalink(); ?>"><h4>
<?php if(mb_strlen($post->post_title)>60) { $title= mb_substr($post->post_title,0,60) ; echo $title. ・・・ ;
} else {echo $post->post_title;}?></h4></a>
</div>
</div>
</li>
<?php 
endwhile;
} //if( $related_posts->have_posts()
wp_reset_query();
} //if $current_tags
?>

タグは、1投稿で複数登録する事が多々あります。
そのため、タグをランダムで取得し、そのタグと同じものがつけられている記事を関連記事として出力します。

参考サイト

【Web.fla さん】の記事
 http://the-zombis.sakura.ne.jp/wp/blog/2014/10/07/post-2220/

関連記事Related article