Действительно ли безопасно зарегистрировать таксономию, не используя рычагов?

Я создаю сайт Wordpress, в котором я хотел использовать пользовательскую таксономию в своих опциях темы, которые я зарегистрировал использование рычага 'init'. Но проблема состояла в том, что рычаги 'init' запущены после опций темы (я использую плагин Платформы Возвращения для опций темы). Таким образом, когда я использовал get_categories () функция в моих опциях темы и пытался получить пользовательскую таксономию, я получал 'invalid_category' ошибку.

Таким образом, я решил просто зарегистрировать таксономию без любых рычагов и просто вызова register_taxonomy () функция в functions.php файле, и это работало.

Я просто хочу знать, 'безопасно' ли это, как в, что было бы последствиями, если я просто вызываю функцию register_taxonomy, не используя рычагов.

Вот код, который не работает при использовании рычага init:

function my_function(){
  register_taxonomy( 'portfolio_category', 'portfolio', array(
                    'labels' => array(
                              'name' => _x( 'Portfolio Categories', 'taxonomy general name' ),
                              'singular_name'     => _x( 'Portfolio Category', 'taxonomy singular name'     ),
                              'search_items'      => __( 'Search Portfolio Categories' ),
                              'all_items'         => __( 'All Portfolio Categories' ),
                              'parent_item'       => __( 'Parent Portfolio Category' ),
                              'parent_item_colon' => __( 'Parent Portfolio Category:' ),
                              'edit_item'         => __( 'Edit Portfolio Category' ),
                              'update_item'       => __( 'Update Portfolio Category' ),
                              'add_new_item'      => __( 'Add New Portfolio Category' ),
                              'new_item_name'     => __( 'New Portfolio Category' ),
                              'menu_name'         => __( 'Portfolio Categories' ),
                          ),
                    'hierarchical' => true,
                  ) );

}
add_action('init', 'my_function');

$portfolio_categories = get_categories(array('taxonomy' => 'portfolio_category', 'hide_empty'=> 0));
echo "<pre>", print_r($portfolio_categories), "</pre>"; // This will return an error of 'invalid_taxonomy'

И вот тот, который работает, (не используя рычагов):

register_taxonomy( 'portfolio_category', 'portfolio', array(
                    'labels' => array(
                              'name' => _x( 'Portfolio Categories', 'taxonomy general name' ),
                              'singular_name'     => _x( 'Portfolio Category', 'taxonomy singular name'     ),
                              'search_items'      => __( 'Search Portfolio Categories' ),
                              'all_items'         => __( 'All Portfolio Categories' ),
                              'parent_item'       => __( 'Parent Portfolio Category' ),
                              'parent_item_colon' => __( 'Parent Portfolio Category:' ),
                              'edit_item'         => __( 'Edit Portfolio Category' ),
                              'update_item'       => __( 'Update Portfolio Category' ),
                              'add_new_item'      => __( 'Add New Portfolio Category' ),
                              'new_item_name'     => __( 'New Portfolio Category' ),
                              'menu_name'         => __( 'Portfolio Categories' ),
                          ),
                    'hierarchical' => true,
                  ) );

$portfolio_categories = get_categories(array('taxonomy' => 'portfolio_category', 'hide_empty'=> 0));
echo "<pre>", print_r($portfolio_categories), "</pre>";

Также первые работы кода, если я поместил его в шаблон страницы, таким образом, я знаю, что делаю его правильно. Сообщите мне об этом

Спасибо.

0
19.05.2014, 22:04
3 ответа

Ваш код, не используя рычаг init использует также рычаг, но не запущенный из Вашего источника. Последнее это было запущено из включения Вашей темы, которая была загружена в WordPress. Это очень плохо для Вашего управления. Если Вы используете рычаг, то включение из Вашего источника на Вашем управлении, Вы выбираете рычаг. Если Вы уедете, это открытое и ядро WP изменяет порядок или другие точки включения темы, возможно, у Вас есть проблема, как функция никогда не будет работать. Также это - плохой стиль, что Вы не ловите свой источник в обертке, как функция для управления. Также легче читать, fied на этом рычаге, этом обратном вызове - Ваша функция.

1
19.02.2020, 23:48

Согласно кодексу WordPress на register_taxonomy()

Используйте init действие для вызывания этой функции. Вызов его за пределами действия может привести к проблемам. Посмотрите № 15568 для деталей.

Лучше будьте в безопасности, чем жаль при регистрации пользовательского taxonomies для пользовательских типов сообщения. Использовать register_taxonomy_for_object_type() прямо после функции для соединения их. Еще Вы могли столкнуться с minetraps, где тип сообщения не присоединяется в обратном вызове фильтра, которые работают во время parse_request или pre_get_posts.

Таким образом, я доверил бы кодексу и придерживался бы использования init сцепитесь затем пытаются выяснить почему get_categories() не работает правильно.

1
19.02.2020, 23:48
  • 1
    При доверии "Кодексу", затем в этом случае Вы предлагаете доверять мне, поскольку я был тем, чтобы добавить, что абзац (сравнивают разность). Другими словами: Никогда не предлагайте вслепую доверять кодексу. Это записано людьми... как Библия. –  kaiser 19.05.2014, 23:23
  • 2
    В то время как я соглашаюсь до степени, потому что Кодекс доступен для редактирования как Википедия, и я действительно понимаю, что некоторые статьи могут стать устаревшими со временем, но говорящий "Никогда вслепую полагают, что кодекс" резок. В отличие от Библии мы можем протестировать функции, методы, и операторы любому доказывают их TRUE или FALSE. Таким образом как Статьи Википедии я говорю, что необходимо взять его с мелкой частицей соли. –  Howdy_McGee♦ 19.05.2014, 23:42
  • 3
    Проблема, которую я вижу, предлагает что-то, не объясняя, почему позади нее - вот почему я сравнил ее с Библией (или любая другая святая книга, которой люди верят в). Для подробно объяснения, почему, прочитайте эту статью и зарегистрируйте редактирование, чтобы добавить что бит к Вашему ответу. –  kaiser 19.05.2014, 23:53

По сути небезопасно сделать что-либо за пределами рычага, когда-либо.

В Вашем случае настоящей проблемой не является то, что Вы используете init рычаг действия, случается так, что Ваш вызов к get_categories не в функции на рычаге действия.

Я полагаю, что необходимо понять "рычаги" в более общих чертах.

Цель системы "рычага" в WordPress состоит в том, чтобы иметь код, выполняются в корректном месте, в корректное время. Простой, действительно. Определенные вещи должны произойти в определенном порядке.

Теперь, один способ гарантировать определенный порядок состоит в том, чтобы просто записать набор кода в файле в порядке, Вы хотите, чтобы он выполнил и затем выполнил его. Простой подход. Однако это имеет проблему добавления в произвольном коде в отдельных моментах в том файле позже. Это - то, где рычаги решают проблему.

WordPress выполняет много кода в определенном порядке. Рычаги используются для введения другого кода в тот предопределенный определенный порядок в именованных местах. Так, код, который не является внутренними функциями, подключенными к рычагам просто, работает в порядке от вершины файла к нижней части файла, везде, где тот файл, оказывается, включен. И тот файл мог бы быть включен по-разному. Вы не можете знать наверняка. Используя рычаг позволяет Вам поместить свой код в основном где угодно, но зайти в него точно правильное время, время Вашего собственного выбора.

Таким образом для кода в плагинах или кода в functions.php файле темы, затем реалистично у Вас никогда не должно быть кода, который не находится в функции и сцеплен, никогда. Существует пара особых случаев тут и там, но чинила немногих из них.

ВЕСЬ код в functions.php файле темы должен быть в функциях, которые присоединены к некоторому рычагу где-нибудь. Это называют "functions.php" по причине, это только должно содержать функции, не кодировать за пределами функций.

0
19.02.2020, 23:48

Теги

Похожие вопросы