サポート » 使い方全般 » wp_list_categoriesにtax_queryを適用

  • yyy111

    (@knon-disign)


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

    グローバルナビゲーションに、
    ドロップダウンでterm一覧を表示したいと考えております。

    複数のタクソノミーを条件にして、
    タクソノミーBの特定のtermに属している場合のみ、
    タクソノミーAのターム一覧の出力を実現したく、

    下記のようなイメージで出来ればと思ったのですが、

    <?php wp_list_categories( array(
    	'post_type' => 'post',
    	'taxonomy' => 'tax-A',
    	'show_option_all' => false,
    	'show_count' => false,
    	'title_li' => '',
    	'tax_query' => array(
    	'relation' => 'AND',
        array(
            'taxonomy'=>'tax-B',
            'terms'=>array( 'term-b' ),
            ),
        )
    )); ?>

    こういった場合はget_termsを工夫して実現するイメージでしょうか?

    どうぞよろしくお願い致します。

    バージョン
    WordPress 3.8.1

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    get_terms で tax-A のtermを取得して、このtermのループ処理を行う中で、tax-Bのterm-bにも属する投稿の有無をget_posts とtax_queryを用いて判別し、表示の分岐を行う方法が最も簡単かと思います。

    また、tax-Aのリスト表示を行う場合、必ずtax-Bのterm-bにも属するものしか表示しないのであれば、かなり難易度は高くなりますが、tax-A の register_taxonomy の際に、update_count_callback パラメーターを指定する方法です。

    update_count_callback パラメーターは、投稿などの更新時に、タクソノミーに属する投稿数を計算し更新するための関数を指定するものです。
    この update_count_callback パラメーターにて、tax-A専用の関数を指定し、その関数の処理内で、tax-Aのtermにもtax-Bのterm-bにも属する投稿数を計算するようにすれば、wp_list_categoriesでは、hide_emptyがtrueとなっていれば、特段記述することなく、term-bにも投稿の所属があるtermのみが表示されます。

    ちなみに、標準的にタクソノミーに属する投稿数を計算し更新するための関数は、_update_post_term_count で wp-includes/taxonomy.php に記載されています。

    トピック投稿者 yyy111

    (@knon-disign)

    >jim912様

    >get_terms で tax-A のtermを取得して、このtermのループ処理を行う中で、tax-Bのterm-bにも属する投稿の有無をget_posts とtax_queryを用いて判別し、表示の分岐を行う方法が最も簡単かと思います。

    なるほど、どうもありがとうございます!
    まずはこちらで表示出来るようにしたいと思います。

    >また、tax-Aのリスト表示を行う場合、必ずtax-Bのterm-bにも属するものしか表示しないのであれば、かなり難易度は高くなりますが、tax-A の register_taxonomy の際に、update_count_callback パラメーターを指定する方法です。

    >wp_list_categoriesでは、hide_emptyがtrueとなっていれば、特段記述することなく、term-bにも投稿の所属があるtermのみが表示されます。

    詳細にありがとうございます。
    この方法が出来ればかなりよさそうなので、
    時間をかけてチャレンジしてみたいと思います!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「wp_list_categoriesにtax_queryを適用」には新たに返信することはできません。