サポート » 使い方全般 » 別のカスタム投稿タイプに共通のタクソノミーを設定している記事内容を取得

  • 解決済 natsu85

    (@natsu85)



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

    カスタム投稿タイプaとbがあり、タクソノミーzzzは両方で指定できるようにしております。

    aの個別ページにbの同じzzzのタームを設定している場合のみ、一覧表示させたいと思っております。
    一覧表示させる際にbの個別ページにカスタムフィールドを使用しており、そのカスタムフィールドに入力されている文字列を表示させるようにしております。

    下記はカスタム投稿aの個別ページ、メインループ内に記載しております。

    <?php
        global $post;
        $term = get_the_terms($post->ID, 'zzz');
        $term = reset($term);
        $args = array(
          'numberposts' => -1,
          'post_type' => 'b',
          'taxonomy' => 'zzz',
          'term' => $term->slug,
        );
        $list = get_posts($args); if($list) : ?>
    
        <div>
          <ul>
            <?php
            foreach( $list as $post ):
            setup_postdata( $post );
            ?>
            <li><?php
              $name = get_field('name');
              if($name){ ?><a href="<?php the_permalink(); ?>"><?php echo $name; ?></a><?php } ?></li>
            <?php endforeach; ?>
          </ul>
        </div>
        <?php wp_reset_postdata(); endif; ?><?php endif; ?>

    上記で同じzzzを設定しているbのカスタムフィールド入力文字列は表示されますが、zzzを設定していない場合がエラーとなってしまいます。
    設定していない場合は表示をしないようにしたいと思っております。

    分かりにくい説明になってしまって申し訳ございませんが、ご教授よろしくお願い致します。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • >エラーとなってしまいます
    どのようなエラーなのか具体的に書いた方が良いでしょう。

    manbo様

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

    エラー内容の記載を忘れておりました。ご指摘ありがとうございました。
    下記エラー内容です。

    reset() expects parameter 1 to be array

    よろしくお願い致します。

    タクソノミー名もターム名もzzzなのでしょうか?または混同していますか?

    エラーは$termの中身が配列ではないまたは空だからでしょう。
    未設定ということは空だと思うので

    if($term) {
    	$term = reset($term);
    }

    と、でもしておいたらどうでしょう?

    またタクソノミーの場合はtax_queryを使いましょう。

    テンプレートタグ/get posts 4.9 タクソノミーパラメータ

    タームがzzz決め打ちなら'term' => $term->slug,とする必要性は無いのではないでしょうか。
    スラッグもzzzなら'term' => 'zzz'?かな?

    manbo様

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

    説明不足で申し訳ございません。
    タクソノミーはzzz
    タームは複数ありますが必ず設定するわけではないため、設定していない(空)記事もあります。

    タクソノミーzzzの中のタームzzz-aというタームを設定している、aの個別ページにbのカスタム投稿タイプ記事の情報を表示させている状態になります。

    エラーになる記事はタクソノミーzzzを設定していない記事になり、
    エラー表示と共に、bの記事全てが表示されてしまいますが、設定していない場合は表示されないようにしたいと思っております。

    • この返信は9 ヶ月、 2 週間前に  natsu85 さんが編集しました。
    • この返信は9 ヶ月、 2 週間前に  natsu85 さんが編集しました。

    あ、ちょっと勘違いでした。
    では全部ifで囲ってしまえば良いと思います。

    <?php
        global $post;
        $term = get_the_terms($post->ID, 'zzz');
    if($term) {
        $term = reset($term);
        $args = array(
          'numberposts' => -1,
          'post_type' => 'b',
          'taxonomy' => 'zzz',
          'term' => $term->slug,
        );
        $list = get_posts($args); if($list) : ?>
    
        <div>
          <ul>
            <?php
            foreach( $list as $post ):
            setup_postdata( $post );
            ?>
            <li><?php
              $name = get_field('name');
              if($name){ ?><a href="<?php the_permalink(); ?>"><?php echo $name; ?></a><?php } ?></li>
            <?php endforeach; ?>
          </ul>
        </div>
        <?php wp_reset_postdata(); endif; ?>
    <?php } ?>

    manbo様

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

    申し訳ございません!
    頂いたコードはすでに試してみたのですが、これで設定していない記事に表示されなくはなるのですが、設定している記事では、設定しているタームのみ表示でなくbの全ての記事情報が表示されてしまうのです。。。

    カスタム投稿 a でターム zzz-a を設定したページに同じタームを持つカスタム投稿 b の投稿を表示する

    カスタム投稿 a でタームを設定しなければカスタム投稿 b のページを表示させない

    この認識で合ってますか?

    現状、ifで囲うと カスタム投稿 b の投稿が全て表示される?

    全ての投稿が表示される時に$termの中は何が入ってますか?
    何も入っていなければカスタム投稿 b のページは出てこないはずなので。

    manbo様

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

    はい。仰っているとおりです!

    if($term) { ~ <?php } ?>
    上記ifで囲むと、設定していないカスタム投稿a個別ページでは、カスタム投稿bの一覧は表示されませんが、
    設定している投稿a個別ページでは、カスタム投稿bの全て(共通ターム以外も)の一覧が表示されてしまいます。

    よろしくお願い致します。

    いや、だから一覧が表示されてしまう状態の時の$termの中はどうなってますか?と尋ねていますが・・・?

    get_posts() の引数($args の要素)に ‘taxonomy’ と ‘term’ を指定しても無視されると思います。
    @manboさんがコメント #post-224095 で指摘なさったように ‘tax_query’ を指定しましょう。

    tax_query の指定方法の例:
    http://blog.nakachon.com/2014/10/27/dont-use-name-field-tax-query-in-japanese/

    manbo様 gblsm様

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

    $termの中にはタクソノミーzzzと設定しているターム名等が入っております。
    ‘tax_query’をご指摘頂いたのにもかかわらず変更していないかったため、zzzを設定していた記事にはカスタム投稿bの記事が全て表示されておりました。
    申し訳ございませんでした。

    変更後は、タクソノミーzzzを設定していないカスタム投稿aにはカスタム投稿bは表示されず
    設定しているカスタム投稿aには、同じタクソノミーzzzと同じタームが設定しているカスタム投稿bの一覧が表示されました。

    お2人まとめてご返信となってしまい申し訳ございません。
    本当にありがとうございました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「別のカスタム投稿タイプに共通のタクソノミーを設定している記事内容を取得」には新たに返信することはできません。