Php 如何在插件文件中获取Woocommerce产品类别
我试图用下面的代码在Wordpress插件中获取所有产品类别。我在活动主题中尝试了相同的代码,它们正在工作并给出正确的输出,但是当我在插件文件中尝试同样的操作时,它返回一个空数组。还有别的办法吗?whtPhp 如何在插件文件中获取Woocommerce产品类别,php,wordpress,woocommerce,custom-taxonomy,Php,Wordpress,Woocommerce,Custom Taxonomy,我试图用下面的代码在Wordpress插件中获取所有产品类别。我在活动主题中尝试了相同的代码,它们正在工作并给出正确的输出,但是当我在插件文件中尝试同样的操作时,它返回一个空数组。还有别的办法吗?whtget\u categories()在插件文件中不起作用 EDIT:我使用它作为对AJAX调用的响应,如下所示。 我的代码如下: add_action( 'wp_ajax_tcf_et_mp_get_categories', 'tcf_et_mp_get_categories' ); functi
get\u categories()
在插件文件中不起作用
EDIT:我使用它作为对AJAX调用的响应,如下所示。
我的代码如下:
add_action( 'wp_ajax_tcf_et_mp_get_categories', 'tcf_et_mp_get_categories' );
function tcf_et_mp_get_categories(){
$taxonomy = 'product_cat';
$orderby = 'name';
$show_count = 0; // 1 for yes, 0 for no
$pad_counts = 0; // 1 for yes, 0 for no
$hierarchical = 1; // 1 for yes, 0 for no
$title = '';
$empty = 1;
$args = array( 'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty );
$all_materials = get_categories( $args );
foreach($all_materials as $material){
$materials_drop_down .= '<option value="'.$material->term_id.'" '.$selected_str.'>'.$material->name.'</option>';
}
//print_r( $all_materials );
wp_send_json( $materials_drop_down );
die();
}
add_action('wp_ajax_tcf_et_mp_get_categories'、'tcf_et_mp_get_categories');
函数tcf_et_mp_get_categories(){
$taxonomy='product_cat';
$orderby='name';
$show_count=0;//1表示是,0表示否
$pad_counts=0;//1表示是,0表示否
$hierarchy=1;//1表示是,0表示否
$title='';
$empty=1;
$args=数组('taxonomy'=>$taxonomy,
'orderby'=>$orderby,
'show_count'=>$show_count,
“pad_计数”=>$pad_计数,
“分层”=>$hierarchical,
“title_li”=>$title,
“hide_empty”=>$empty);
$all_materials=get_categories($args);
foreach($material表示所有物料){
$materials\u drop\u down.=''.$material->name';
}
//打印(所有材料);
wp_send_json($materials_drop_down);
模具();
}
函数获取类别()
用于Wordpress类别。相反,您应该使用get_terms()
作为产品类别的“自定义分类法”:
$all_materials = get_terms( array(
'taxonomy' => 'product_cat',
'orderby' => 'name',
'show_count' => 0,
'pad_counts' => 0,
'hierarchical' => 1,
'title_li' => '',
'hide_empty' => 1
) );
// Test raw output
print_r( $all_materials );
最后,我可以用MySQL查询来解决这个问题。我试图在WP AJAX函数中获取Woocommerce产品类别,其中
get\u Categories()
或get\u terms()
不适用于Product\u cat
分类法。但是在这个函数中,我可以执行WP-MySQL-Quires,因此下面的代码生成并返回预期的输出
add_action( 'wp_ajax_tcf_et_mp_get_categories', 'tcf_et_mp_get_categories' );
function tcf_et_mp_get_categories()
{
global $wpdb;
$categories = $wpdb->get_results( " SELECT wp_terms.*
FROM wp_terms
LEFT JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE wp_term_taxonomy.taxonomy = 'product_cat'" );
$materials_drop_down = '<select>';
$materials_drop_down .= '<option value="0">Choose Material Type</option>';
foreach( $categories as $category )
{
$materials_drop_down .= '<option value="'. $category->term_id .'">' . $category->name . '</option>';
}
$materials_drop_down = '</select>';
wp_send_json( $materials_drop_down );
die;
}
add_action('wp_ajax_tcf_et_mp_get_categories'、'tcf_et_mp_get_categories');
函数tcf_et_mp_get_categories()
{
全球$wpdb;
$categories=$wpdb->get_results(“选择wp_术语。*
从wp_术语
在wp_terms.term_id=wp_term_taxonomy.term_id上左连接wp_term_分类法
其中wp_term_taxonomy.taxonomy='product_cat';
$materials\u drop\u down='';
$materials_drop_down.=“选择材料类型”;
foreach($categories作为$category)
{
$materials\u drop\u down.=''.$category->name';
}
$materials\u drop\u down='';
wp_send_json($materials_drop_down);
死亡
}
希望这对某人有所帮助。在哪个钩子中使用此代码?我不使用任何钩子。我需要返回AJAX调用的类别列表。如果出现错误“invalid_taxonomy”。。。它表示在ajax调用之后,将调用您的注册分类法。。。。检查函数优先级…如果您已将分类添加到“init”操作中,那么它应该可以工作。。。但这取决于您所做的代码。。。。上下文…返回以下错误
WP\u错误对象([errors]=>Array([invalid\u taxonomy]=>Array([0]=>invalid taxonomy.))[error\u data]=>Array())
,但您的代码在主题模板文件中工作。@mapmalith因此,您可能需要在问题中添加更多相关代码,通过这种方式,我将能够测试您的问题,并真正尝试为您提供正确的解决方案wp\u ajax\u tcf\u et\u mp\u get\u categories
是对add\u操作的操作回调('wp\u ajax\uu…
它不是一个动作挂钩或任何东西,而是我自己的wp\u ajax\u…
@mapmalith的函数,这正是我所说的…所谓的回调就是tcf\u et\u mp\u get\u categories
和wp\u ajax\u tcf\u et\u mp\u get\u categories
是这个回调的ajax挂钩…但是“寻求调试帮助的问题应该包括在问题本身中复制它所需的最短代码。”…你应该明白,用你的实际代码,我无法测试任何东西…