我的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?
答案 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;
}