Как изменить уже зарегистрированную таксономию


Сегодня мне нужно было изменить аргументы в пользовательской таксономии, которая уже была зарегистрирована сторонним плагином . В частности, я хотел установить аргумент show_admin_column в true и изменить значение rewrite, чтобы это был не просто таксономический слаг. В данном случае это был тип записи "Люди" с пользовательской таксономией "Категория людей".

Я был удивлен, что об этом не спрашивали раньше, так что вот вопрос и ответ.

Author: mrwweb, 2014-09-17

1 answers

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 в соответствии с Кодексом, так что это мне кажется правильным.

 28
Author: mrwweb, 2017-04-13 12:37:50