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

How to get Woocommerce Product Categories within a Plugin File

我正在尝试使用以下代码在 Wordpress 插件中获取所有产品类别。我在活动主题中尝试了相同的代码并且它们正在工作并提供了正确的输出但是当我试图在插件文件中执行相同的操作时它 returns 一个空数组。还有其他方法吗?为什么 get_categories() 在插件文件中不起作用?

编辑:我将其用作对 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();
}

函数get_categories()用于Wordpress分类。相反,您应该使用 get_terms() 作为 "custom taxonomy" 作为产品类别:

$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_categories()get_terms() 不起作用product_cat 分类法。但是在这个函数中我可以执行 WP MySQL Quires 所以下面的代码会产生 returns 预期的输出。

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;
}

希望这对某人有所帮助。