[WordPress] 商品紹介ページに同じカテゴリーの関連商品を並べたい
やりたいこと
- ショッピングサイトなどでは、商品の紹介ページに、その商品と同じカテゴリー(タクソノミー)がついた商品を一緒に表示していることがあります
- 今見ている商品と似た商品が他にもあることをユーザーに伝えることで、たくさんサイト内を回遊してもらおうというわけです
- よくある手法ですが、いざやろうとするとちょいちょい手が止まるので、コピペで使える形式にまとめました
サンプルコード
- カスタム投稿タイプ「product」にカスタムタクソノミー「bag」が関連付いています
- 「product」には、カスタムフィールド「prd_image」が関連付いていて、製品のサンプル画像が設定されています
<?php
$terms = get_the_terms( $post->ID, 'bag' );
$args = array(
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'bag',
'field' => 'slug',
'terms' => $terms[0]->slug,
),
),
'post__not_in' => array($post->ID),
);
$the_query = new WP_Query($args);
if( $the_query->have_posts() ) {
echo '<div class="list_product">';
while( $the_query->have_posts() ) {
$the_query->the_post();
$title = get_the_title();
$url = get_the_permalink();
$image_html = wp_get_attachment_image( post_custom('prd_image'), 'full' );
?>
<a href="<?php echo $url ?>">
<figure>
<?php echo $image_html; ?>
<figcaption><?php echo $title; ?></figcaption>
</figure>
</a>
<?php
}
echo '</div>';
}
wp_reset_postdata();
?>
仕組み、解説、補足など
- 「post__not_in」に指定したIDの記事は、検索結果から除外されます。ここでは表示中の商品自体を除外することで、同じ商品がリストアップされないようにしています
- 「post__not_in」には配列でIDを渡す必要があります。除外する記事が一つだからといってIDをそのまま渡すのはNGです
- 商品リストをスライド形式にするのもいいと思います
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。