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