Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Echo specific Product Attributes and Meta Data in WooCommerce Cart

Update (related to author comments):

I would like to customize WooCommerce cart.php to display some meta-data that are working just fine on the product page using Essential Grid premium plugin.

I would like to display some product attributes fields and also some custom meta fields that I have created with the meta field creator of Essential Grid plugin.

For testing, I'm using 'Height' attribute (so 'pa_height') and the custom field 'Age' which slug is 'eg-age-cal'.

Currently, I have tried using the following:

<?php echo get_post_meta($product_id, 'pa_height', true );?>

And also:

<?php echo get_post_meta($product_id, 'eg-age-cal', true );?>

But these does not seem to work.

I have managed to get the code to work using:

<?php echo get_post_meta($product_id, '_regular_price', true );?>

So I know the code is working.

I just need help working out, how can I get the values from these Custom Attribute and Custom Field.

Thanks.

like image 962
Steven Wright Avatar asked Aug 07 '16 10:08

Steven Wright


People also ask

How do I get the metadata of a product in WooCommerce?

$product_id = 37; // Defined product Id for testing // Get the WC_Product Object from the product ID (optional) $product = wc_get_product($product_id); // If needed // Get product unprotected meta data in an array $product_data = $product->get_data(); // Output row data echo '<pre>'. print_r( $obj, true ) .

How do I get all attributes in WooCommerce?

Access All Product Attribute's And Their Data global $product // Get all attributes and their data $attributes = $product->get_attributes(); foreach ( $attributes as $attribute ) { if ( is_object($attribute) ) { // Array of attribute data $attribute_data = $attribute->get_data(); // Do what you need to do... } }

What are custom attributes WooCommerce?

Custom attributes in WooCommerce are fields that you can add to your products, which can then be used for various purposes such as product filtering, variations, and more. There are two types of custom attributes: product attributes and variation attributes.


1 Answers

Update (compatibility with WC 3+)

After your explanations in your comment below, I just discover that you are using Essential Grid premium plugin (a commercial plugin) to create some custom fields and attributes related to your wooCommerce products.

At this point, I can't help, because I have never used this plugin before, and I don't know where data is stored within this plugin, in the database.

I think that you can't use usuals WordPress/WooCommerce functions to get this data, and that is the reason that you will not get any data using get_post_meta() as usual…

The best way to get helped is:
- to search/explore your database for that custom fields data.
- to search/ask in Essential Grid plugin authors support threads.


My original answer:

For attributes defined in your products, using get_post_meta() function with the $product_id variable, you need to use it this way to get the data you want (this is an array of values):

// getting the defined product attributes
$product_attr = get_post_meta( $product_id, '_product_attributes' );

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );

You can also use the function get_attributes() (more recommended), this way:

// Creating an object instance of the product
$_product = new WC_Product( $product_id );

// getting the defined product attributes
$product_attr = $_product->get_attributes();

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );

All code is tested and working.

NOW CART DATA IS SET IN COOKIES AND SESSIONS and you will need to use WC()->cart syntax to get cart data and items

So you can use this kind of code to get the items (products) in cart:

foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // getting the defined product attributes
        $product_attr = $_product->get_attributes();

        // displaying the attributes array of values (just to test and to see output)
        echo var_dump( $product_attr ) . '<br>';
    }
}

This will display the attributes array of values for each product in CART.


A solution based on this thread, using wc_get_product_terms() inside the same code snippet to get your attribute:

foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // compatibility with WC +3
        $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

        // Getting "height" product attribute
        $myAttribute = array_shift( wc_get_product_terms( $product_id, 'pa_height', array( 'fields' => 'names' ) ) );
        echo $myAttribute . '<br>';
    }
}

References:

  • WC_Product Class - get_attributes()
  • WooCommerce - Get custom product attribute
  • Get Cart products id on checkout WooCommerce page, to display product images
  • WordPress Code Reference - get_post_meta()
like image 145
LoicTheAztec Avatar answered Sep 21 '22 12:09

LoicTheAztec