Echo specific Product Attributes and Meta Data in WooCommerce Cart
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: