サポート » 使い方全般 » postとカスタム投稿に共通のタクソノミーを設定し、singleページにリンクを設置

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

    postとカスタム投稿に共通のタクソノミーを設定しております。
    カスタム投稿のsingleページに、postと同じ共通のタクソノミー(typeA)を選択している場合に、子カテゴリー一覧(postのみ)へのリンクを設置したいと思っております。

    下記はカスタム投稿のsingleページのループ内に記載したコードです。

    <?php
        global $post;
        $term = get_the_terms($post->ID, 'typeA');
        $args = array(
          'post_type' => 'post',
          'taxonomy' => 'typeA',
          'term' => $term->slug,
          'category_name' => 'process',
        );
        ?>
        <?php $postlink = get_posts($args);
    if($postlink && in_category('process') || post_is_in_descendant_category( get_term_by( 'slug', 'process', 'category' ))) : ?>
    
        <p class="btn__body">
          <?php
          $cat = get_the_category();
          echo '<a href=' . get_category_link( $cat[0]->term_id ) . ' class="btn btnOutline">typeA BLOG</a>';
          ?>
        </p>
        <?php wp_reset_postdata(); endif; ?>

    とし、確認はできました。
    もっとスマートな書き方があるような気がするのですが、強引でしょうか?

    もしもっと良い書き方がありましたら、ご教授をお願い致します。
    よろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • ワードプレスと直接関係のないところと、良い書き方かどうか微妙なところですが構文について進言いたします。

    if文は便利さに対して単純性が求められる部分で、ここにひとまとめに判断基準をつめこむと動作の確実さがさがりメンテナンス性がさがります。

    いちばん面倒ですがいちばん管理がしやすく確認もしやすい書き方を書いてみます。

    $check = 0;
    if($postlink){ $check+=1; }//A
    if(in_category('process')){ $check+=2; }//B
    if(post_is_in_descendant_category( get_term_by( 'slug', 'process', 'category' )){ $check+=4; }//C
    //以降のフラグは 8 16 32 64 となります。
    switch($check){
    case 0:
    //どれも合致しない
    break;
    case 1:
    //Aのみ合致
    break;
    case 2:
    //Bのみ合致
    break;
    case 3:
    //ABみ合致
    break;
    case 4:
    //Cみ合致
    break;
    case 5:
    //AC合致
    break;
    case 6:
    //BC合致
    break;
    case 7:
    //全合致
    break;
    }
    

    これで確実な動作が得られると思います。メンテナンスも条件を増減するに追加と削除で、前の数値の二倍を設定するだけでいくつでも全分岐の候補あげることができます。
    ANDとORが混在している状態は、今回の動作に問題がなければよいのですが、あまりよいと感じることができませんでしたのでここはスマートでない気がします。
    そんなに重要ではないところですが、なにかのご参考になれましたら幸いです。

    msio様

    お返事おそくなってしまい、申し訳ございません。

    ありがとうございました。
    私も、ANDとORが混在していることが気になっており、スマートな書き方を模索しております。
    ただ、ご教授頂いた内容ですと、タクソノミーのタームは増えていく予定ですので、増えても表示できるようにし、なおかつ当てはまらない場合は、非表示の2択になるため、少し違うように感じます。

    また、最初のコードでは表示できなくなってしまいました。
    もう少し、試行錯誤してみようと思います。

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

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