Steamer Lane Studio技術備忘録WordPress

WordPressで関連記事一覧の表示

wordpress WordPressで関連記事一覧の表示
最終更新日: 2023年4月15日

普通にタグでやればいいのだが、ポータルサイト作成時にいくつかの検索機能を求められ、検索結果ページのSEO対策なんざと管理のしやすさなどからタグバージョンとACFによるカスタムフィールド~予め用意したチェックボックスに記事毎チェックを入れて抽出、表示する方法と2通り作ってみた。

<?php //tag ver
$tags = wp_get_post_tags($post->ID);
if($tags):
$tagID = array();
foreach($tags as $tag){
array_push($tagID, $tag -> term_id);
}
$args = array(
'tag__in' => $tagID,
'post__not_in' => array($post->ID),
'posts_per_page' => 5,
'ignore_sticky_posts'=>1,
'orderby'=>'rand',
);
$my_query = new WP_Query($args);
if($my_query-> have_posts()):
?>
<aside class="full-width relatedEntriesWrap">
<h3>関連記事
</h3>
<div class="relatedEntries">
<?php while($my_query->have_posts()): $my_query->the_post(); ?>
<a href="<?php the_permalink(); ?>">
<picture>
<img src="<?php the_post_thumbnail_url('thumbnail');?>" alt="<?php echo get_the_title(); ?>">
</picture>
<h3>
<span><?php the_field('kana'); ?></span>
<?php echo get_the_title(); ?>
</h3>
</a>
<?php endwhile;?>
</div>
</aside>
<?php else: ?>
<!--if no related-->
<?php endif;wp_reset_postdata(); ?>
<?php endif; ?>
?>

ACFチェックボックスver

<aside class="full-width relatedEntriesWrap">
<h3>関連記事
</h3>
<div class="relatedEntries">
<?php
global $post;
$post_id = $post->ID;
$field_name = 'territory'; // カスタムフィールドの項目名
$value = post_custom( $field_name );
$my_posts = get_posts(array(
'post_type' => 'post', // 投稿タイプ
'meta_key' => $field_name, // カスタムフィールドの項目名
'meta_value' => $value, // カスタムフィールドの値
'posts_per_page' =>5, // 表示件数
'orderby' => 'rand', // 表示順の基準
'order' => 'ASC', // 昇順・降順
'exclude' => $post_id // 表示中の投稿を除外
));
$count = count($my_posts);
if($count>=1): foreach($my_posts as $post): setup_postdata($post); ?>
<a href="<?php the_permalink(); ?>">
<picture>
<img src=">?php the_post_thumbnail_url('thumbnail');?>" alt="<?php echo get_the_title(); ?>">
</picture>
<h3>
<span><?php the_field('kana'); ?></span>
<?php echo get_the_title(); ?>
</h3>
</a>
<?php endforeach; wp_reset_postdata();?>
</div>
</aside>
<?php else:?>

<p>関連記事はありません。</p>//空白可

<?php endif ?>