如何在 Woocommerce 中获取变体运输 class

How to get the variation shipping class in Woocommerce

我想显示为每个变体设置的变量产品运输 class。 我意识到我可能需要混合使用 php 和 Javascript,但我想先把 PHP 放在一边。

我猜最好的开始方式是使用:

if( $product->is_type( 'simple' ) ) {
    $product = wc_get_product();

    $shipping_class = $product->get_shipping_class();
} elseif( $product->is_type( 'variable' ) ) {
    $product = wc_get_product();
    $shipping_class = $product->get_shipping_class();
}

但我不确定如何运送产品变体 class 或者我这样做是否正确。查看 wc_get_product_variation 或变体以查看是否有答案。

任何帮助将不胜感激,可能会将所有内容显示为数组并使用 javascript 隐藏所选内容。

如何获得变体发货 class?

要获取已定义可变产品 ID 的 classes 变体,有两种方法:

1) 对 product_shipping_class 分类法使用 wp_get_post_terms() 函数:

// Get the WC_Product_Variable instance Object (if needed)
$product = wc_get_product( $product_id );

// Initializing
$shipping_classes = array();

// Loop through the visible variations IDs 
foreach ( $product->get_visible_children() as $variation_id ) {
    // Get the variation shipping class WP_Term object
    $term = wp_get_post_terms( $variation_id, 'product_shipping_class' ); 

    if( empty($term) ) {
        // Get the parent product shipping class WP_Term object
        $term = wp_get_post_terms( $product->get_id(), 'product_shipping_class' ); 

        // Set the shipping class slug in an indexed array
        $shipping_classes[$variation_id] = $term->slug;
    }
}

// Raw output (for testing)
var_dump($shipping_classes);

这将为您提供一组变体 ID/运输 class 对。


2) 使用get_shipping_class_id() WC_Product 方法:

// Get the WC_Product_Variable instance Object (if needed)
$product = wc_get_product( $product_id );

// Initializing
$shipping_classes = array();

// Loop through the visible variations IDs 
foreach ( $product->get_visible_children() as $variation_id ) {
    // Get the Product Variation instance Object
    $variation = wc_get_product($variation_id); 

    // Get the shipping class ID
    $term_id = $variation->get_shipping_class_id(); 

    // The shipping class WP_Term Object
    $term = get_term_by('term_id', $term_id, 'product_shipping_class'); 

    // Set the shipping class slug in an indexed array
    $shipping_classes[$variation_id] = $term->slug;
}

// Raw output (for testing)
var_dump($shipping_classes);