関連商品の表示
-
投稿者投稿
-
2015年8月21日 5:47 AM #75460no23h参加者
お世話になります。
商品詳細ページに表示される関連商品について質問があります。
wordpress、php共に初心者です。現在の商品カテゴリーは以下のようになっております。
[カテゴリー階層]
商品
-A
–あ
–い
–う
-B
–え
–お商品カテゴリーの中に親カテゴリーがあり、その子カテゴリーがあります。
また、関連商品を生成するコードは以下になります。
[functions.php]function related_items_list(){
global $post;$categories = get_the_category($post->ID);
if( $categories ){
$category_ids = array();
foreach( $categories as $category){
$category_id = $category->term_id;
$category_child = get_term_children($category_id, ‘category’);
if($category_child != true){
$category_ids[] = $category->term_id;
}
}
$args=array(
‘category__in’ => $category_ids,
‘post__not_in’ => array($post->ID),
‘posts_per_page’=> 4,
‘ignore_sticky_posts’=> 1,
‘orderby’ => rand,
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) {
$my_query->the_post();
echo get_template_part(‘related_items’);
}
wp_reset_query();
}
}
}現状では、例えばカテゴリー「あ」の商品のページでは、同じく「あ」のカテゴリーの商品が表示されるのですが、これを、親カテゴリー「A」が包括する「あ」「い」「う」の同じ階層のカテゴリー商品がすべて表示されるようにしたいのです。
同様に「お」の商品ページでは「え」「お」の商品、といった具合にです。そのように変更したい場合、functions.phpのコードをどのように書き換えればいいのかわかりません。
get_the_category()の戻り値category_parentなどを記述のterm_idと変更してみたり色々試してみましたがうまくいきませんでした。どなたかご教授いただけないでしょうか。
宜しくお願いします。2015年8月21日 9:41 AM #75461uishi参加者if($category_child != true){ $category_ids[] = $category->term_id; }
を
if($category_child != true){ $category_ids[] = $category->parent; }
かな。
元のコードは
投稿のカテゴリー配列取得して、
それぞれの子のあるなしチェックして
子ない場合それ自身のIDで別の配列作って
その配列に対してそれぞクエリを実行している。
これの子のない場合自身のIDではなく親のID取得して、クエリー実行かな。
半分素人の自分ならそれを試してみる。
親カテゴリーにもチェックが入ってることが前提かも。
ちなみにpost_parentは固定ページの親子関係みたいですね。- この返信は9年、 3ヶ月前にuishiが編集しました。
2015年8月21日 11:19 AM #75465kitamuuu参加者no23hさんが仰られているカテゴリ階層が今後変化しないのであればuishiさんの仰られている方法でも問題ないと思います。
ですが例えば、商品カテゴリの配下に「お勧め商品」というカテゴリがあって、カテゴリA,Bと併用する場合、「お勧め商品」カテゴリに子カテゴリがない場合には、その親カテゴリの「商品」に属する商品、つまり全ての商品が表示されてしまうことになります。
ですので、カテゴリA,Bのスラッグを配列で変数に格納しておいて、ループの中で該当したterm_idを$category_idsに格納するのが一番簡単で確実かと思います2015年8月21日 1:14 PM #75466no23h参加者uishiさん
ご回答ありがとうございます。
早速試してみたところ、希望していた通りの結果になりました。
確認してみたのですが、たしかに親カテゴリーにもチェックが必須でした。
迅速にご回答いただき、ありがとうございます。kitamuuuさん
ご回答ありがとうございます。
なるほどそのような場合は想定していませんでした。
今後、kitamuuuさんが仰られているように、併用するカテゴリーを設ける可能性があります。
その場合は提示いただいた方法を試してみます。
大変勉強になりました。2015年8月21日 2:10 PM #75467uishi参加者wordpressのcodexの
WP Queryのパラメーターのところのカテゴリーの項目を参照して
$argsの内容を編集するとよいかも。
category__inよりcatがいいのかな。親カテゴリーのチェックが要らなくなる?
こちらこそ勉強になりました。
kitamuuuさんもありがとうございます。2015年8月21日 11:58 PM #75481no23h参加者uishiさん
catで試してみたところ以下のエラーがでました。
Warning: urldecode() expects parameter 1 to be string, array given in /home/users/2/her.jp-atum/web/wp-includes/query.php on line 1893これは使えないのですかね・・・。
2015年8月24日 8:46 AM #75492uishi参加者$category_idsが配列なんでエラーを吐くみたいです。
諸先輩に何かいい知恵はございませんでしょうか。2015年8月24日 12:09 PM #75495kitamuuu参加者catにしても親カテゴリー(A・B)にチェックしていないと取得できないと思いますので、category__inのままでいいと思いますよ。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。