从可变产品的 WooCommerce 变体中获取权重值

Get weight value from WooCommerce variations of a variable product

我正在开发一个自动调整产品价格的插件。我所有的产品都是可变产品,这让我无法解决这个问题。

if( $product->is_type( 'variable' ) ){
                           
  foreach ( $product->get_available_variations() as $key => $variation ) {
                                
    foreach ($variation['attributes'] as $attribute ) {

      if ( ! $attribute->get_weight() ) {

我检查一下以确保产品是可变的。唯一的产品属性是 'Size'。在这里,我为每种产品提供 4-8 种不同的尺寸变化。其中每一个都有一个权重值,这似乎是 Woocommerce 默认实现的。我无法从每个变化中获得重量。好奇我是否从错误的地方调用 get_weight() ,或者是否有不同的方法。 get_weight() 当然不行所以我想知道从变体中获取属性是不是完全错误?

使用WC_Variable_Product get_visible_children() (或get_children()方法,尝试:

global $product; // If needed | or $product = wc_get_product( $product_id );

if( $product->is_type( 'variable' ) ){
    foreach ( $product->get_visible_children() as $variation_id ) {
        $variation = wc_get_product( $variation_id ); // Get the product variation object
        $weight    = $variation->get_weight(); // Get weight from variation

        if ( ! $weight ) {
            echo '<div>' __("No weight") . '</div>';
        } else {
            echo '<div><strong>' __("Weight") . ':</strong> ' . wc_format_weight( $weight ) . '</div>';
        }
    }
}

或者您可以使用 WC_Variable_Product get_available_variations() 如下:

global $product; // If needed | or $product = wc_get_product( $product_id );

if( $product->is_type( 'variable' ) ){
    foreach ( $product->get_available_variations() as $key => $variation_data ) {
        $weight = $variation_data['weight']; // Get weight from variation

        if ( ! $weight ) {
            echo '<div>' __("No weight") . '</div>';
        } else {
            echo '<div><strong>' __("Weight") . ':</strong> ' . $variation_data['weight_html'] . '</div>';
        }
    }
}

两个代码片段都有效。