register_taxonomy()є інструментом для роботи. З Кодексу:
Ця функція додає або замінює таксономію.
Один із варіантів - скопіювати 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 );
Зауважте вище, що я ввів третій register_taxonomy()аргумент у очікуваний тип масиву. Це не є строго необхідним, оскільки register_taxonomy()використання, wp_parse_args()яке може обробляти objectабо array. При цьому сказано, register_taxonomy()що $argsвони повинні бути представлені arrayвідповідно до Кодексу, так що я вважаю себе правильним.