管理页面中的 Woocommerce 产品类别分类法

Woocommerce Product Category taxonomy in Admin Pages

我正在使用 WooCommerce 为 WordPress 编写插件。我需要在插件的管理页面 中获取 WooCommerce 产品类别列表(分类 'product_cat'(注意“管理页面”的重点)。 然而,在调用 get_categories()get_terms() 按分类法过滤 后会导致错误(我简化了代码。子菜单 class 在其他地方并且据我了解,它不会干扰):

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 挂钩中完成的,因此它们应该 return 产品类别。

任何人都可以理解发生了什么?有没有其他方法可以在管理页面中获取产品类别?

谢谢。

编辑: 我也尝试过使用钩子 plugins_loadedwoocommerce_init.

好吧,我不知道到底发生了什么,但现在它正在使用 init 挂钩。 我之前试过,但是没有,不知道为什么。现在我只做了 2 个测试:使用 function current_filter() 检查函数本身是否正确挂钩;并挂钩到 init 一个包含对 get_terms($args) 的调用的函数。然后我注意到它正在工作,我撤消了更改,一切都在工作。幽灵失败。