サポート » 使い方全般 » タームの一覧を表示したい

  • 解決済 kokoron

    (@kokoron)


    タームにカスタムフィールドを設定して、例えば、fruit が yes のターム一覧を表示したいと思っております。
    以下のようなコードで表示が出来ませんでした。
    ちなみにtaxonomyとhide_emptyだけの指定で、すべてのタームの表示は出来ていますので、カスタムフィールドの値の指定のところがおかしいんだろうと思っております。

    <ul>
    <?php
    $args = array(
    'taxonomy' => array('hoge'),
    'hide_empty' => false,
    'meta_query' => array(
              array(
                   'key' => 'fruit',
                   'value' => 'yes',
              )
    ));
    
    $the_query = new WP_Term_Query($args);
    foreach($the_query->get_terms() as $term){
    $term_link = get_term_link($term->slug,'hoge');
    ?>
    <li><a href="<?php echo $term_link; ?>"><?php echo $term->name; ?></a></li>
    <?php
    }
    ?>
    </ul>

    また、以下のようにしても駄目でした。

    $args = array(
    'taxonomy' => array('hoge'),
    'hide_empty' => false,
    'meta_key' => 'fruit',
    'meta_value' => 'yes'
    );

    どうぞ宜しくお願いいたします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 kokoron

    (@kokoron)

    表示するテンプレートは固定ページです。

    Tsuyoshi.

    (@andante0727)

    こんにちは。詳しくはわからないですが、その条件で実行すると以下のSQLが発行されます。

    SELECT
        DISTINCT t.*,
        tt.*
    FROM
        wp_terms AS t
        INNER JOIN
            wp_termmeta
        ON  (
                t.term_id = wp_termmeta.term_id
            )
        INNER JOIN
            wp_term_taxonomy AS tt
        ON  t.term_id = tt.term_id
    WHERE
        tt.taxonomy IN('hoge')
    AND ((
                wp_termmeta.meta_key = 'fruit'
            AND wp_termmeta.meta_value = 'yes'
            ))
    ORDER BY
        t.name ASC

    wp_termmeta がないので、結果としては何も返ってきませんでした。
    タームに関するメタ情報で、ポストのメタ情報ではないのかなと勝手に思っています。

    なので、結局は WP_Term_Query ではなく、WP Query や WP Meta Query を使わないといけない気がしますね。

    • この返信は6年、 7ヶ月前にTsuyoshi.が編集しました。
    • この返信は6年、 7ヶ月前にTsuyoshi.が編集しました。
    • この返信は6年、 7ヶ月前にTsuyoshi.が編集しました。
    • この返信は6年、 7ヶ月前にTsuyoshi.が編集しました。
    • この返信は6年、 7ヶ月前にTsuyoshi.が編集しました。
    トピック投稿者 kokoron

    (@kokoron)

    返信ありがとうございます。
    わたしのコードではwp_termmetaの指定が出来ないみたいですね。
    出来ないわけは無いのでしょうが、4.4以降の新しめの関数ということで、情報もあまりありませんでした。
    get_term_metaでのmeta_key指定の取得もなかなか難しいようです。
    今回はひとまず簡便にdescriptionの値を利用して、取得する方法にしました。

    Tsuyoshi.

    (@andante0727)

    wp_termmeta というのはデータベースのテーブルです。
    wp_termmeta というテーブルのデータが存在しないのだと思います。

    wp_termmeta に保存されるデータはタームに紐づくメタ情報なので、WP_Term_Query で取得するのは投稿のカスタムフィールドではないようです。

    そのあたりを調べて書いたのでよかったらどうぞ。

    トピック投稿者 kokoron

    (@kokoron)

    なるほどです。
    タームへのカスタムフィールドの追加にはACFプラグインを使ってるんですが、DBを見てみたらwp_optionsにデータが保存してあり、wp_termmetaは使ってませんでした。。
    原因がハッキリしました。有難うございます!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「タームの一覧を表示したい」には新たに返信することはできません。