微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 按属性值减少WooCommerce项目库存

我有一个Woocommerce“可变产品”的设置,唯一的变化是’尺寸’属性:15克,100克,250克.我想要做的是使用该变化量传递给Woo wc-stock-functions,这样当购买产品变化’15克’时,整体库存下降15而不是1.

在Woo内部,有文件wc-stock-functions(http://hookr.io/plugins/woocommerce/3.0.6/files/includes-wc-stock-functions/) – 这甚至提供了一个过滤器,woocommerce_order_item_quantity.我想用它来将库存数乘以克数,并以克为单位减少库存.

我正在尝试这个:

// define the woocommerce_order_item_quantity callback 
function filter_woocommerce_order_item_quantity( $item_get_quantity, $order, 
$item ) { 
$original_quantity = $item_get_quantity; 
$item_quantity_grams = $item->get_attribute('pa_size');
// attribute value is "15 grams" - so remove all but the numerals
$item_quantity_grams = preg_replace('/[^0-9.]+/', '', $item_quantity_grams);
// multiply for new quantity
$item_get_quantity = ($item_quantity_grams * $original_quantity);

return $item_get_quantity; 
}; 

// add the filter 
add_filter( 'woocommerce_order_item_quantity', 
'filter_woocommerce_order_item_quantity', 10, 3 ); 

但我现在收到内部服务器错误作为回应.

有没有人知道我上面的代码做错了什么?谢谢你的帮助.

解决方法:

一个错误在$item-> get_attribute(‘pa_size’);因为$item是WC_Order_Item_Product对象的实例,并且WC_Order_Item_Product类不存在get_attribute()方法.

相反,您需要使用WC_Order_Item_Product Class中的get_product()方法获取WC_Product对象的实例…

所以你的代码应该是:

add_filter( 'woocommerce_order_item_quantity', 'filter_order_item_quantity', 10, 3 ); 
function filter_order_item_quantity( $quantity, $order, $item )  
{
    $product   = $item->get_product();
    $term_name = $product->get_attribute('pa_size');

    // The 'pa_size' attribute value is "15 grams" And we keep only the numbers
    $quantity_grams = preg_replace('/[^0-9.]+/', '', $term_name);

    // Calculated new quantity
    if( is_numeric ( $quantity_grams ) && $quantity_grams != 0 )
        $quantity *= $quantity_grams;

    return $quantity;
}

代码位于活动子主题(或活动主题)的function.PHP文件中.经过测试和工作.

Note: This hooked function is going to reduce the stock quantity based on that new returned increased quantity value (in this case the real quantity multiplied by 15)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐