タクソノミーで同じカテゴリの関連商品を表示

2016年12月1日

商品詳細のページで、同じブランドの商品を表示したいと思ったけど、タクソノミーで分類されてるので少し手間取った。

query_postsにどう入れればいいかまでの下りがこれ。


<?php

//get_the_terms タクソノミー名を入れる今回は'brands'
//$tarmsにはタクソノミーのオブジェクトが入ってると思う
$tarms = get_the_terms(  $post -> ID ,'brands' );
// slugから現在のsignleで表示されてるslugを抜き取る
$tarslug = $tarms[0]->slug;


$args = array(
    'posts_per_page' => 5,//表示件数
    'post__not_in' => array($post->ID),//現在表示されているのは除く
    'tax_query' => array(
      array(
        'taxonomy' => 'brands',
        'field' => 'slug',
        'terms' => $tarslug,
      ),
    ),
    'orderby' => 'rand',//ランダムに表示するが、Post type orderがあるとそっちを優先するので次の関数でそのフィルタを削除
);

//Post type orderの影響でランダムに出来ないので、とりあえずフィルタで削除
remove_all_filters('posts_orderby');
query_posts( $args );
?>

一番困ったのはPost type orderがランダムの指定を邪魔してた。
filterをリムーブできる関数を知ったので、それを叩いてから入れた。