web-dev-qa-db-ja.com

すでに登録されている分類法を変更する方法

今日私は サードパーティのプラグイン によって既に登録されているカスタム分類法の議論を変更する必要がありました。特に、show_admin_column引数をtrueに設定し、それが単なる分類スラッグではないようにrewriteスラッグを変更したいと思いました。この場合、それは "People Category"カスタム分類法を持つ "People"投稿タイプでした。

私はこれが前に尋ねられなかったので驚きました、それでここに質問と答えがあります。

18
mrwweb

register_taxonomy() は仕事のためのツールです。コーデックスから:

この機能は分類を追加または上書きします。

1つの選択肢は、register_taxonomy()$argsをコピーして修正することです。しかし、それは元のregister_taxonomy()コードへの将来の変更が上書きされることを意味します。

したがって、少なくともこの場合は、元の引数を取得し、変更したい引数を変更してから、分類法を再登録することをお勧めします。この解決策のためのインスピレーションはこれで@Ottoに行きます カスタム投稿タイプについての同様の質問への答え

例のpeopleカスタム投稿タイプとpeople_category分類法を使用して、これを行います。

function wpse_modify_taxonomy() {
    // get the arguments of the already-registered taxonomy
    $people_category_args = get_taxonomy( 'people_category' ); // returns an object

    // make changes to the args
    // in this example there are three changes
    // again, note that it's an object
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // re-register the taxonomy
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'wpse_modify_taxonomy', 11 );

上記のことに注意してください。私は3番目のregister_taxonomy()引数を期待される配列型に型キャストします。 register_taxonomy()objectまたはarrayを扱うことができる wp_parse_args() を使用するので、これは厳密には必要ありません。とは言っても、Codexによるとregister_taxonomy()$argsarrayとして投稿されるはずなので、これは私にとって正しいことです。

20
mrwweb