如何在过滤器'woocommerce_product_get_weight'中获取产品ID?

时间:2015-04-26 20:19:10

标签: php wordpress woocommerce

我的functions.php文件中的以下代码确实改变了所有产品的重量,但我想将其分离为特定产品。

add_filter('woocommerce_product_get_weight', 'rs_product_get_weight', 10, 1);
function rs_product_get_weight($weight) {
    $weight = 45.67;

    return $weight;
}

有没有办法在我的过滤功能中确定产品ID?

2 个答案:

答案 0 :(得分:2)

我害怕说它不会这样工作...... 如果你看一下woocommerce get_weight函数

public function get_weight() {

    return apply_filters( 'woocommerce_product_get_weight', $this->weight ? $this->weight : '' );
}

也许你正在引用旧版的woocommerce ......

因此,举例来说,如果你想改变推车产品重量,你必须挂钩woocommerce_before_calculate_totals过滤器

并添加此功能

public function action_before_calculate( WC_Cart $cart ) {

        if ( sizeof( $cart->cart_contents ) > 0 ) {

            foreach ( $cart->cart_contents as $cart_item_key => $values ) {

                $_product = $values['data'];

                {

                ////we set the weight
                $values['data']->weight = our new weight;

            }


            }
        }
}

依旧......

答案 1 :(得分:1)

这有点奇怪,但产品重量似乎来自get_weight()方法,里面有2个过滤器。您正在引用的那个以及确实具有产品ID的woocommerce_product_weight也会传递。

/**
 * Returns the product's weight.
 * @todo   refactor filters in this class to naming woocommerce_product_METHOD
 * @return string
 */
public function get_weight() {
    return apply_filters( 'woocommerce_product_weight', apply_filters( 'woocommerce_product_get_weight', $this->weight ? $this->weight : '' ), $this );
}

因此,你应该能够用:

来过滤体重
add_filter('woocommerce_product_weight', 'rs_product_get_weight', 10, 2);
function rs_product_get_weight($weight, $product) {
    if( $product->id == 999 ){
        $weight = 45.67;
    }

    return $weight;
}