mapmath
mapmath

Reputation: 1532

How to get Woocommerce Product Categories within a Plugin File

I am trying to get all the Product Categories inside a Wordpress Plugin with the following Code. I have tried the same code within the active theme and they are working and gives the right output but when I am trying to do the same inside the plugin file it returns an empty array. Is there any other way to do this? wht get_categories() is not working inside the plugin file?

EDIT: this I am using as the response to a AJAX call as below.

My Code as follow,

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

Upvotes: 0

Views: 1110

Answers (3)

farid teymouri
farid teymouri

Reputation: 191

try to get category_id form wp_wc_category_lookup table.


    global $wpdb;
    $cats = $wpdb->get_results("SELECT category_id from {$wpdb->prefix}wc_category_lookup");
 

Upvotes: 0

mapmath
mapmath

Reputation: 1532

Finally I could solve this with MySQL Query here I m trying to get Woocommerce Product Categories in a WP AJAX function where get_categories() or get_terms() does not work for product_cat taxonomy. But within this function I can execute WP MySQL Quires so the following code produces and returns the expected output.

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

Hope this will help for someone.

Upvotes: 0

LoicTheAztec
LoicTheAztec

Reputation: 254221

The function get_categories() is used for Wordpress categories. Instead you should use get_terms() for a "custom taxonomy" as Product categories:

$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 );

Upvotes: 1

Related Questions