関連商品の表示

フォーラム 使い方全般 関連商品の表示

  • このトピックには7件の返信、3人の参加者があり、最後にkitamuuuにより8年、 8ヶ月前に更新されました。
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • 投稿者
    投稿
  • #75460
    no23h
    参加者

    お世話になります。

    商品詳細ページに表示される関連商品について質問があります。
    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と変更してみたり色々試してみましたがうまくいきませんでした。

    どなたかご教授いただけないでしょうか。
    宜しくお願いします。

    #75461
    uishi
    参加者
    if($category_child != true){
    $category_ids[] = $category->term_id;
    }

    if($category_child != true){
    $category_ids[] = $category->parent;
    }

    かな。
    元のコードは
    投稿のカテゴリー配列取得して、
    それぞれの子のあるなしチェックして
    子ない場合それ自身のIDで別の配列作って
    その配列に対してそれぞクエリを実行している。
    これの子のない場合自身のIDではなく親のID取得して、クエリー実行かな。
    半分素人の自分ならそれを試してみる。
    親カテゴリーにもチェックが入ってることが前提かも。
    ちなみにpost_parentは固定ページの親子関係みたいですね。

    • この返信は8年、 8ヶ月前にuishiが編集しました。
    #75465
    kitamuuu
    参加者

    no23hさんが仰られているカテゴリ階層が今後変化しないのであればuishiさんの仰られている方法でも問題ないと思います。
    ですが例えば、商品カテゴリの配下に「お勧め商品」というカテゴリがあって、カテゴリA,Bと併用する場合、「お勧め商品」カテゴリに子カテゴリがない場合には、その親カテゴリの「商品」に属する商品、つまり全ての商品が表示されてしまうことになります。
    ですので、カテゴリA,Bのスラッグを配列で変数に格納しておいて、ループの中で該当したterm_idを$category_idsに格納するのが一番簡単で確実かと思います

    #75466
    no23h
    参加者

    uishiさん
    ご回答ありがとうございます。
    早速試してみたところ、希望していた通りの結果になりました。
    確認してみたのですが、たしかに親カテゴリーにもチェックが必須でした。
    迅速にご回答いただき、ありがとうございます。

    kitamuuuさん
    ご回答ありがとうございます。
    なるほどそのような場合は想定していませんでした。
    今後、kitamuuuさんが仰られているように、併用するカテゴリーを設ける可能性があります。
    その場合は提示いただいた方法を試してみます。
    大変勉強になりました。

    #75467
    uishi
    参加者

    wordpressのcodexの
    WP Queryのパラメーターのところのカテゴリーの項目を参照して
    $argsの内容を編集するとよいかも。
    category__inよりcatがいいのかな。親カテゴリーのチェックが要らなくなる?
    こちらこそ勉強になりました。
    kitamuuuさんもありがとうございます。

    #75481
    no23h
    参加者

    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

    これは使えないのですかね・・・。

    #75492
    uishi
    参加者

    $category_idsが配列なんでエラーを吐くみたいです。
    諸先輩に何かいい知恵はございませんでしょうか。

    #75495
    kitamuuu
    参加者

    catにしても親カテゴリー(A・B)にチェックしていないと取得できないと思いますので、category__inのままでいいと思いますよ。

8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • このトピックに返信するにはログインが必要です。