For my Woocommerce variable products I'm implementing a custom size chooser on the single product page and have this sizes in a table:
These variations are just: 30B
30C
30D
rather than being split in to: 30
and B
C
D
What I am trying to figure out is: How to grab the shipping class for each product variations?
I have something similar on cart page but I don't know what is the variation ID or how to get it from the single product page:
$product_id = ( 0 != $cart_item['variation_id'] ) ? $cart_item['variation_id'] : $cart_item['product_id'];
// need the variation id for the above to be able to do the rest:
$product_shipping_classes = get_the_terms( $product_id, 'product_shipping_class' );
$product_shipping_class_name = ( $product_shipping_classes && ! is_wp_error( $product_shipping_classes ) ) ? current( $product_shipping_classes )->name : '';
I know how to do it once I have the variation ID. I just can't figure out how to get it in order to do the rest. The only things that I need to get for it, are the product id and the slug for the variations (there is also a color attribute on this page).
However I have given to the product a default variation to use (so the hidden variation_id
is set).
Perhaps that needs to be fetched first to know the id of the selected color to then fetch the variation ids for the others?
In WooCommerce product single pages for variable products, you can't get the selected product variation in PHP as it's a live event (client side, not server side).
The way to do it is using JavaScript/jQuery to get it. As you don't provide any related code for this single product page regarding your variable products, is not possible for me to give you a real working code that will completely match your needs.
Get the selected variation ID on single product page for variable product (In this example I display the selected variation ID dynamically below add to cart button):
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested under WooCommerce 3+ and works.
Some related answers examples usage (with jQuery and Woocommerce single product pages):