サポート » 使い方全般 » 現在の記事と同じタクソノミーの記事を表示

  • 解決済 natsu85

    (@natsu85)


    お世話になっております。

    カスタム投稿の個別ページと同じタクソノミーの、他のカスタム投稿記事をランダムで表示させたく思っております。

    <?php
        global $post;
        $term = array_shift(get_the_terms($post->ID, 'shop'));
        $shoprecommended = get_posts( array(
          'post_type' => 'featured_products',
          'taxonomy'=> 'shop',
          'term'=> '$term->slug',
          'orderby' => 'rand',
          'posts_per_page' => 4,
          'post__not_in' => array($post->ID)
        ));
        if($shoprecommended):
        ?>
        <section class="shop_recommended">
          <header class="shop_recommended__header">
            <h2>オススメ商品</h2>
          </header>
    
          <?php
          foreach( $shoprecommended as $post ):
          setup_postdata( $post );
          ?>
          <article class="grid">
            <a href="<?php the_permalink(); ?>">
              <?php if(has_post_thumbnail()): ?>
              <p class="grid__thumb">
                <?php the_post_thumbnail('img600'); ?>
              </p>
              <?php endif; ?>
              <h2 class="grid_title"><?php the_title(); ?></h2>
            </a>
          </article>
          <?php endforeach; ?>
        </section>
        <?php endif; wp_reset_postdata(); ?>

    では表示できなく
    'term'=> '$term->slug',を削除すると表示することができます。
    var_dump(get_the_terms($post->ID, 'shop'));にて確認するとタクソノミーshopの情報は確認できます。

    ご教授お願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    シングルクォーテーション(’)で括っているからでは。

    'term'=> '$term->slug',

    'term'=> $term->slug,

    LABE

    (@latobeam)

    get_posts() でカスタムタクソノミーを指定する場合、 tax-query を使用する必要があります。

    $shoprecommended = get_posts(array(
        'post_type' => 'featured_products',
        'tax-query' => array(
            array(
                'taxonomy' => 'shop',
                'terms' => $term->slug,
            ),
        ),
        'orderby' => 'rand',
        'posts_per_page' => 4,
        'post__not_in' => array($post->ID)
    ));

    array() の階層にお気を付けください。

    そのほかに気になった点を。
    3行目の array_shift() ですが、この関数は「参照渡し」といって、引数は変数でなければならないので、あらかじめ変数に代入しておく必要があります。
    また、配列から最初の要素を取り出すだけなら reset() のほうが処理が軽くておすすめです(こちらも参照渡しです)。

    $term = get_the_terms($post, 'shop');
    $term = reset($term);

    もう一点、最後の行ですが、 wp_reset_postdata() は if の内側でいいです。if に入らない場合は実行する必要がないので。

    • この返信は7年、 1ヶ月前にLABEが編集しました。
    トピック投稿者 natsu85

    (@natsu85)

    ishitaka様

    お返事ありがとうございました。

    すごい初歩的な間違いをしていましたね。
    恥ずかしい・・・

    ありがとうございました!!

    トピック投稿者 natsu85

    (@natsu85)

    LABE様

    お返事ありがとうございました。

    またまた初歩的な・・・
    本当に恥ずかしい

    参照渡しがまだ理解できていないので、勉強になりました!

    wp_reset_postdata()endif;の順番も逆にしました。

    上記に変更後、無事表示することができました!!

    本当にありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「現在の記事と同じタクソノミーの記事を表示」には新たに返信することはできません。