Як змінити таксономію, яка вже зареєстрована


18

Сьогодні мені потрібно було змінити аргументи щодо власної таксономії, яка вже була зареєстрована стороннім плагіном . Зокрема, я хотів встановити show_admin_columnаргумент trueі змінити rewriteкулі, щоб він був не лише таксономією. У цьому випадку це був пост "Люди" зі спеціальною систематикою "Категорія людей".

Я був здивований, цього раніше не запитували, тож ось питання та відповідь.


Лише бічна примітка для тих, хто застряє, не забудьте стерти постійні посилання перед тим, як перевірити результат.
un.pez.vivo

Відповіді:


22

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відповідно до Кодексу, так що я вважаю себе правильним.


Я намагаюся зробити це для того, щоб змінити плоску таксономію на ієрархічну систематику. Я просто змінюю ієрархічну властивість на справжню. Роблячи це, це спричиняє два мета-поля для таксономії праворуч від екрана редагування публікацій, і я не можу насправді додати таксономії ...
Joel Worsham

Переконайтесь, що ви використовуєте той самий слизь (наприклад 'people_category'), що і оригінальний систематик, щоб перезаписати його.
mrwweb

1
Геніальність! Чистий геній! Працювали чудово!
DaveyJake

1
Я знайшов проблему з цим рішенням: capabilitiesпараметр зберігається внутрішньо, capтому він не буде переданий новій зареєстрованій систематиці. Дивіться мою відповідь на подібне запитання тут
Fabien Quatravaux

1
Це чудово, я використовував це для додавання ієрархічних URL-адрес до власної систематики.
Брайан Торф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.