サポート » 使い方全般 » カスタムタクソノミーのカスタムフィールドの取得

  • 解決済 rei15

    (@rei15)


    こんにちは。

    カスタムタクソノミーについて少し混乱してきたので、教えていただければと思います。

    現在カスタム投稿タイプ(Custom Type Post UI)を使い、記事の投稿部分を使っています。
    記事のカテゴリは、カスタムタクソノミーで管理したいと思います。

    カスタム投稿タイプ : magazine_post
    カスタムタクソノミー:(スラグ名)
    ├ category
    └ published_year
    としています。

    それぞれのカスタムタクソノミーには、アイコンを設定できるようにカスタムフィールドを追加しました。(category_avatar, published_avatar)

    そこで質問ですが、

    published_yearに属しているアイコンの値を取得したいので、このように書きましたが、
    get_optionがうまくいきません。

    $catargs = array(
        'taxonomy' => 'published_year',
        'slug' => "2001"
    );
    $cc = get_categories($catargs);
    foreach($cc as $c) {
        $pid = $c->term_id; //確認できました
        $post = "taxonomy_" . $pid;
        print_r(get_option("taxonomy_$pid")); //何も入っていません。
        the_field('published_avatar', $post); //当然取得できません。
    }

    やり方を変えて、

    $term = get_term_by('slug', "2001", 'published_year');
    $id = $term->term_id;
    $post_id = 'category_' . $id;
    the_field('published_avatar', $post_id);

    これもNGでした。
    $post_id = “taxonomy_” . $id
    でもだめでした。

    どこが問題なのか、教えていただけると助かります。

    また、理解できない点が1つあります。
    私はWPがついているデフォルトの「カテゴリ」機能を使っていないですが、

    $categories = get_categories("hide_empty=0&exclude=1");

    を書くと、 「category」のカスタムタクソノミーで設定したものが取得できてしまいます。
    タクソノミーの名前が「category」なのでしょうか。

    「category」も、「published_year」も、同じカスタムタクソノミーでそれぞれカスタムフィールドアバターを設定しているのですが、「category」は

    $cat_info = get_category($cat); //そのcategoryに絞ったとき
    $cat_slug = $cat_info->slug;
    $cat_name = $cat_info->name;
    $post_id  = 'category_'. $cat;
    the_field('category_avatar', $post_id); // 取得できた

    で取得できてしまいます。

    同じことをやろうとしているのに、なぜ published_yearができていないのか、よく分かりません。

    言葉だけでの説明がわかりにくくて申し訳ありませんが、
    少しでもアドバイスいただけたらと思います。

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

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

    (@gatespace)

    the_field という関数が使われているので、カスタムフィールドについては
    Advanced Custom Fields を使っていると推測します。

    その上で、Advanced Custom Fields でカスタムタクソノミー(カテゴリーやタグを含む)に紐付けたカスタムフィールドを出力するには、2番目のパラメーターにタクソノミー名とタームIDを指定してあげないとダメです。

    http://www.advancedcustomfields.com/resources/functions/the_field/

    上記ドキュメントの例にある $post_id examples 以降を参考にしてください。
    今回の事例において taxonomy_ではダメですよ。

    あと、カスタムタクソノミーを作成する場合、タクソノミー名にデフォルトで使われている category などを使うのは混乱の元なのでやめた方がいいです。

    http://codex.wordpress.org/Function_Reference/register_taxonomy#Reserved_Terms

    このページの「Reserved Terms」の部分が「予約語」といってカスタムタクソノミー名で使ってはいけない単語です

    トピック投稿者 rei15

    (@rei15)

    gatespace様、

    ご回答ありがとうございます。
    get_termsの使い方がそもそも間違っているのが問題でしたね。。
    また、予約語の categoryを使っていたのも確かに混乱の元でした。。

    2番目のパラメーターにタクソノミー名とタームIDを指定してあげないとダメです。

    これでばっちり解決しました!
    ありがとうございます!

    すいません、ついでに1つ質問していいですか?
    タームIDを指定しないといけないとのことですが、タームIDはどのように取得すればいいですか?
    私は、

    $catargs = array(
        'taxonomy' => 'published_year',
        'slug' => "2001"
    );
    $cc = get_categories($catargs);
    foreach($cc as $c) {
        $pid = $c->term_id; //タームID確認できました
    }

    のように取得しました。
    タクソノミー(published_year)の中に、2001,2002,2003,2004,2005のようなタームがあって、その中で2001というタームのIDを取得したいです。
    get_categoriesを介さない方法がないでしょうか。

    カテゴリでもないのに(通常のWPのカテゴリ) get_categories を使っていいかどうか。。

    すいません、トピックからずれていますが、ご教授いただければと思います。

    よろしくお願いします。

    トピック投稿者 rei15

    (@rei15)

    すいません、自己解決しました(^_^;)

    $term = get_term_by("slug", "2001", "published_year");
    $tid = $term->term_id;

    関数が多すぎていろいろ混乱しましたが、無事に取得できました。

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

    トピック投稿者 rei15

    (@rei15)

    おつかれさまです。

    解決済みにします。
    ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタムタクソノミーのカスタムフィールドの取得」には新たに返信することはできません。