Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在插件文件中获取Woocommerce产品类别_Php_Wordpress_Woocommerce_Custom Taxonomy - Fatal编程技术网

Php 如何在插件文件中获取Woocommerce产品类别

Php 如何在插件文件中获取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

我试图用下面的代码在Wordpress插件中获取所有产品类别。我在活动主题中尝试了相同的代码,它们正在工作并给出正确的输出,但是当我在插件文件中尝试同样的操作时,它返回一个空数组。还有别的办法吗?wht
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挂钩…但是“寻求调试帮助的问题应该包括在问题本身中复制它所需的最短代码。”…你应该明白,用你的实际代码,我无法测试任何东西…