wordpress - Woocommerce 通过延期交货防止负变化库存

标签 wordpress woocommerce

我的商店允许延期交货,但我不希望库存数量为负数。

我试着用这个来解决这个问题:

add_action('woocommerce_variation_set_stock', 'avoid_negative_stock', 10, 1);
function avoid_negative_stock( $product ) {
    if ( did_action( 'woocommerce_variation_set_stock' ) >= 2 )
        return;
    if($product->get_stock_quantity() < 0){
        $product->set_stock_quantity(0);
        $product->save();
    }
}

但它不起作用:/

谁能帮我解决这个问题?

问候

最佳答案

您可以使用 woocommerce_update_product_stock_query Hook 。
this answer您可以找到解决方案。

Keep in mind that it's not a good idea to force product inventory management.

我举个例子:

  1. 您已为库存为 1 数量 的产品启用延期交货。
  2. 一位客户通过购买3 件 为该产品下了订单。
  3. 根据您的规则,产品的库存数量将为零 (而不是 -2)
  4. 订单被取消或退款,产品库存数量重置为 3 (而不是 1)

这是乘以同一产品的所有订单,这些订单因任何原因被取消和/或退款。 产品库存数量将不再可靠。

只要注意它。

也就是说,您可以像这样禁用负库存:

// disables the negative product stock quantity
add_filter( 'woocommerce_update_product_stock_query', 'disable_negative_stock_quantity', 10, 4 );
function disable_negative_stock_quantity( $sql, $product_id_with_stock, $new_stock, $operation ) {

    global $wpdb;

    // if the new stock quantity is negative, it sets zero
    if ( $new_stock < 1 ) {
        $new_stock = 0;
    }

    // generates SQL with the stock quantity at zero
    $sql = $wpdb->prepare( "UPDATE {$wpdb->postmeta} SET meta_value = %f WHERE post_id = %d AND meta_key='_stock'", wc_stock_amount( $new_stock ), $product_id_with_stock );
    
    return $sql;

}

代码已经过测试并且可以工作。将它添加到您的事件主题的 functions.php。

关于wordpress - Woocommerce 通过延期交货防止负变化库存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67050390/

相关文章:

javascript - WordPress 主页上的自定义 css 和 js

php - 显示 WooCommerce 可变产品选项

php - 如何以编程方式将类别添加到 WooCommerce 产品?

javascript - 重复下拉 Javascript 对第二个下拉菜单元素的影响

wordpress - Woocommerce REST API 扩展订单响应

mysql - 合并两个选择语句(追加列)

php - 避免 Woocommerce 中特定产品类别的购物车商品价格更新

wordpress - wordpress 中的 woocommerce 返回总是像产品类型一样简单

html - 将搜索框添加到下拉 Wordpress

php - WooCommerce API : Create order with meta data on line item