サポート » 使い方全般 » 関連記事の表示がうまくいかない

  • いつもお世話になっております。

    カスタム投稿の記事ページで、同タクソノミーに属する別のカスタム投稿の記事を表示したいと思っております。

    構成としては
    カスタム投稿:商品
    カスタム投稿:店舗
    タクソノミー:販売店
    ターム:販売店a、販売店b、販売店c・・・

    のような形で投稿タイプやタクソノミーを作っています。

    今回、商品のページで関連記事という形で店舗を表示したいと考えております。
    その紐付を販売店というタクソノミーが担っております。

    関連記事の表示方法について色々調べて下記ソースを作ってみましたが、希望通りの動きが実現できません。

    <?php
    	global $post;
    	$term2 = array_values(get_the_terms($post->ID, '販売店'));
    	$args2 = array(
    	'posts_per_page' => '-1',
    	'post_type' => '店舗', //カスタム投稿タイプ名
    	'taxonomy' => '販売店', //タクソノミー名
    	'term' => $term2->slug, //ターム名
    	);
    ?>
    <?php $myPosts = get_posts($args2); if($myPosts) : ?>
    <?php foreach($myPosts as $post) : setup_postdata($post); ?>
    
    処理
    
    <?php endforeach; ?>
    <?php else : ?>
    <?php endif; wp_reset_postdata(); ?>

    予定では、チェックを入れた販売店の店舗の一覧が全部出るはずだったんですが、実際に動かしてみると、投稿タイプ店舗のタクソノミー販売店の全記事が表示されます。

    チェックを入れたタームの記事だけ出したいのですが、上手くいきません。

    上記のソースのどこかを変えれば動くのかすら分からない状況です。

    正しいソース、又は他のやり方があるなら、その方法を教えて頂きたいと思ってます。

    説明下手で申し訳ありませんが、是非ともよろしくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 初めに必要なタームのidの配列が必要です。
    $term2 = array_values(get_the_terms($post->ID, '販売店'));
    get_the_termsはタームのオブジェクトが配列になって帰ってきたと思うので
    これではだめだと思います。
    array(1, 5, 10)
    のようにterm_idのみの配列に最終的になっている必要があります。
    変数にどのような値が入っているかは var_dumpやprint_rなどで分かりますので
    確認しながらやってみるといいと思います。

    次にget_postsの引数の$args2

    'taxonomy' => '販売店', //タクソノミー名
    'term' => $term2->slug, //ターム名

    この部分ですが、これはcodexのこちらを確認しながらやってみてください。
    term_idを配列にして渡した場合のoperatorはINにすれば取得できます。

    追記:すみません。INはデフォルトだったようなのでoperatorの指定はいらないですね…。

    トピック投稿者 toakts0024

    (@toakts0024)

    jdbbさん
    返信ありがとうございます。

    教えて頂いたとおりに調べながらやってみたところ、term_idのみの配列を作る事は出来ました。

    しかし、get_postsの引数で、この配列を指定する方法が分かりません。
    fieldでterm_idを指定し、termsで配列を指定すればいいのかなって思ってるのですが、
    記述方法がいまいち上手く分かりません。

    教えて頂ければ幸いです。

    トピック投稿者 toakts0024

    (@toakts0024)

    ちなみにterm_idの配列は、

    $term_list = array();
    if ( $terms ) {
        foreach ( $terms as $term ) {
            $term_list[] = $term->term_id;
        }
    }

    こんな感じで作りました。

    mocomoco

    (@silent_dandy)

    そこまでくればあと一歩、jdbbさんが回答したリンクを参考にして、$args2をちょろっと書き換えるだけです。

    $args2 = array(
      'posts_per_page' => '-1',
      'post_type' => '店舗', //カスタム投稿タイプ名
      'tax_query' => array(
        array(
          'taxonomy' => '販売店',
          'field'    => 'term_id',
          'terms'    => $term_list,
        ),
      ),
    );

    ちなみにterm_id配列を取得するときにwp_list_pluck関数を使うと一発で取得できて楽チンです。
    $term_list = wp_list_pluck($terms,'term_id');

    トピック投稿者 toakts0024

    (@toakts0024)

    やりました!

    mocomocoさんの方法で希望通りの動作が確認できました!

    jdbbさん、mocomocoさん

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

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「関連記事の表示がうまくいかない」には新たに返信することはできません。