Get the product variations attributes values term ID and name

前端 未结 1 2173
余生分开走
余生分开走 2021-02-15 21:33

In WooCommerce, I\'m using $product->get_variation_attributes() to get the variations attributes for a product. This function returns an array with the names wit

1条回答
  •  情深已故
    2021-02-15 22:09

    Update for WooCommerce versions 3+

    foreach( $product->get_variation_attributes() as $taxonomy => $terms_slug ){
        // To get the attribute label (in WooCommerce 3+)
        $taxonomy_label = wc_attribute_label( $taxonomy, $product );
    
        // Setting some data in an array
        $variations_attributes_and_values[$taxonomy] = array('label' => $taxonomy_label);
    
        foreach($terms_slug as $term){
    
            // Getting the term object from the slug
            $term_obj  = get_term_by('slug', $term, $taxonomy);
    
            $term_id   = $term_obj->term_id; // The ID  <==  <==  <==  <==  <==  <==  HERE
            $term_name = $term_obj->name; // The Name
            $term_slug = $term_obj->slug; // The Slug
            // $term_description = $term_obj->description; // The Description
    
            // Setting the terms ID and values in the array
            $variations_attributes_and_values[$taxonomy]['terms'][$term_id] = array(
                'name'        => $term_name,
                'slug'        => $term_slug
            );
        }
    }
    

    Below WooCommerce version 3

    I don't see any duplicate variations IDs in your raw data array… Your question is not very clear, so is difficult to guess what are the missing Ids you are looking at. Then I take the risk to answer and I suppose that the missing IDs are the term Ids from the attributes values…

    To get this terms IDs, I use Wordpress function get_term_by(), this way:

    foreach( $product->get_variation_attributes() as $taxonomy => $terms_slug ){
        // To get the taxonomy object
        $taxonomy_obj = get_taxonomy( $taxonomy );
    
        $taxonomy_name = $taxonomy_obj->name; // Name (we already got it)
        $taxonomy_label = $taxonomy_obj->label; // Label
    
        // Setting some data in an array
        $variations_attributes_and_values[$taxonomy] = array('label' => $taxonomy_obj->label);
    
        foreach($terms_slug as $term){
    
            // Getting the term object from the slug
            $term_obj  = get_term_by('slug', $term, $taxonomy);
    
            $term_id   = $term_obj->term_id; // The ID  <==  <==  <==  <==  <==  <==  HERE
            $term_name = $term_obj->name; // The Name
            $term_slug = $term_obj->slug; // The Slug
            // $term_description = $term_obj->description; // The Description
    
            // Setting the terms ID and values in the array
            $variations_attributes_and_values[$taxonomy]['terms'][$term_id] = array(
                'name'        => $term_name,
                'slug'        => $term_slug
            );
        }
    }
    

    And with:

    echo '
    '; print_r($variations_attributes_and_values);echo '
    ';

    I will get this output, with the real terms IDs for each attribute for a product variations (I have arranged the array output to get it more compact):

    Array(
        [pa_color] => Array(
            [label] => Color
            [terms] => Array(
                [8] => Array(
                    [name] => Black
                    [slug] => black'
                )
                [9] => Array(
                    [name] => Blue
                    [slug] => blue
                )
                [11] => Array(
                    [name] => Green
                    [slug] => green
                )
            ) 
        )
        [pa_bulk_quantity] => Array(
            [label] => Bulk quantity
            [terms] => Array(
                [44] => Array(
                    [name] => Pack of 10 dozen
                    [slug] => pack-of-10-dozen
                )
                [45] => Array(
                    [name] => Case of 50 dozens
                    [slug] => case-of-50-dozens
                )
            )
        )
    )
    

    0 讨论(0)
提交回复
热议问题