2

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

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

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

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

4

1 回答 1

3

使用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>';
        }
    }
}

两个代码片段都有效。

于 2021-01-13T20:46:22.173 回答