Таксономия категорий товаров Woocommerce на страницах администратора

#php #wordpress #woocommerce #wordpress-plugin-creation

#php #wordpress #woocommerce #wordpress-создание плагина

Вопрос:

Я пишу плагин для WordPress с использованием WooCommerce. Мне нужно получить список категорий продуктов WooCommerce (таксономия 'product_cat' ) на странице администратора плагина (обратите внимание на акцент на «странице администратора»). Однако последующие вызовы get_categories() и get_terms() фильтрация по таксономии приводят к ошибке (я упростил код. Класс подменю находится где-то в другом месте и, насколько я понимаю, это не мешает):

 add_action( 'init', 'myplugin_admin_settings' );
function myplugin_admin_settings() {
    $plugin = new Submenu( new MyPlugin_Admin_Page('myplugin_options') );
    $plugin->init();
}
class MyPlugin_Admin_Page {
    public function __construct($option_name) {
        $args = array(
            'taxonomy'     => 'product_cat',
            'hide_empty'   => false
        );
        var_export(get_categories( $args ));  // Prints 'error'
        var_export(get_terms( $args ));       // Prints 'error'
        var_export(get_terms());              // Prints the whole list of terms including those belonging to 'product_cat' taxonomy
    }
}
  

Напечатанная ошибка:

 WP_Error::__set_state(array(   'errors' =>   array (    'invalid_taxonomy' =>     array (      0 => 'Invalid taxonomy.',    ),  ),   'error_data' =>   array (  ),))array (  '' => NULL,)
  

Что указывает на то, что таксономия не существует. И действительно, если я обращаюсь к taxonomy_exists('product_cat') нему, говорит false . Однако весь список напечатанных терминов включает термины, принадлежащие 'product_cat' , что кажется невозможным, если таксономия не существует. Это меня убивает. В качестве примера:

   43 =>
  WP_Term::__set_state(array(
 'term_id' => 56,
 'name' => 'Accesorios',
 'slug' => 'accesorios',
 'term_group' => 0,
 'term_taxonomy_id' => 56,
 'taxonomy' => 'product_cat',
 'description' => '',
 'parent' => 0,
 'count' => 1,
 'filter' => 'raw',
  )),
  

Эти вызовы выполняются в init hook, поэтому они должны возвращать категории продуктов.

Любой может понять, что происходит? Есть ли другой способ получить категории продуктов на страницах администратора?

Спасибо.

РЕДАКТИРОВАТЬ: я пробовал также с помощью хуков plugins_loaded и woocommerce_init .

Ответ №1:

Ну, я не знаю, что на самом деле произошло, но теперь он работает с использованием init hook. Я пробовал раньше, но это не помогло, не знаю почему. Теперь я только что выполнил 2 теста: используйте функцию current_filter() , чтобы проверить, что сама функция была правильно подключена; и подключитесь к init функции, содержащей вызов get_terms($args) . Затем я заметил, что это работает, и я отменил изменения, и все заработало. Сбой Ghost.

Комментарии:

1. Я не понимаю, почему -1 к ответу. Это все еще может дать людям некоторый helo, вместо этого я мог бы просто удалить его или удалить весь вопрос, мне все равно, но я думаю, что это может дать людям подсказки для перепроверки частей кода. И почему комментарий кого-то другого, кто предложил использовать hook woocommerce_init , здесь больше нет.