sketching-website-layout-wireframes-picjumbo-com

長いタイトルですみません。しかし記事は短めですw

Advanced Custom Fieldsでは、カテゴリに例えば画像を格納するカスタムフィールドを設定することが出来るのですが、これをカテゴリーごとにフィールドグループを変えないといけないことになった場合に使える方法をお知らせしたいと思います。

カテゴリーでカスタムフィールドを作成し、ルールを設定する方法などは、「Advanced Custom Fields カテゴリー カスタムフィールド 追加」などと検索すると丁寧に説明してあるページに辿り着きますので、そちらをご覧下さい。

Advanced Custom Fieldsのカテゴリーページへのカスタムフィールド追加の説明ページで説明してあるように、最後に「フィールドグループ」の位置の所のルールで

「Taxonomy Terms 」「等しい」 「カテゴリー」

と指定すると、フィールドグループのフィールドがカテゴリーのページに出てくると思います。

しかし、この時点ではどのカテゴリーに適用するかは指定できないため、特に設定したく無いカテゴリーの編集画面にも追加したカスタムフィールドが出てきてしまいます。

カテゴリーが少ない、また、カテゴリーに適応させたいフィールドグループが1つしか無いという場合にはこれでも良いのですが、少し見栄えが悪い、お客様に消して欲しいとリクエストされた場合には、下記のページの方法で、STEP1からSTEP3までのコードをfnctions.phpに貼付ければ完成です。

Custom field for specific category

しかし、さらに進んで、適用するフィールドグループを親カテゴリにより変えたいという場合は、下記のコードを追加し、フィールドグループのルールの所で親カテゴリを指定することで、カテゴリーの編集画面でのフィールドグループの表示をコントロールできるようになります。上記ページのSTEP3をごっそり下記のものに変えると間違いが少ないかもしれません。

add_filter('acf/location/rule_match/category_id', 'acf_location_rules_match_category', 10, 3);
function acf_location_rules_match_category($match, $rule, $options) {
    if (!isset($_GET['tag_ID']) || 
            !isset($_GET['taxonomy']) || 
            $_GET['taxonomy'] != 'category') {
        // bail early
        return $match;
    }
    $term_id = $_GET['tag_ID'];
    $selected_term = $rule['value'];

// (追加分はここから) 現在のtermIDから親カテゴリを取得する
    $cat = get_category( $term_id, false ); 
    $cat_p = $cat -> parent;
// (追加分はここまで)

    if ($rule['operator'] == '==') {
        $match = ($selected_term == $cat_p ); // 親カテゴリと比較
    } elseif ($rule['operator'] == '!=') {
        $match = ($selected_term != $cat_p); // 親カテゴリと比較
    }
    return $match;
}

解説しているページが無かったので、困っている人もいるのではないかと簡単に書きましたが、いかがでしたでしょうか。同じように困っている人のお役に立てれば幸いです。

保存

保存