首页 > 解决方案 > “woocommerce_can_reduce_order_stock”过滤器在后端不起作用

问题描述

我有一个名为“报价”的自定义订单状态,我添加了以下代码来尝试防止具有此状态的订单的库存水平减少。

function bw_do_not_reduce_quote_stock( $reduce_stock, $order ) {
    if ( $order->has_status( 'quote' ) ) {
        $reduce_stock = false;
    }
    return $reduce_stock;
}

add_filter( 'woocommerce_can_reduce_order_stock', 'bw_do_not_reduce_quote_stock', 10, 2 );

这适用于前端网站上的订单。但是,如果管理员在后端添加或编辑订单,库存就会减少。

后端是否有替代挂钩?还是我错过了其他东西?

标签: wordpresswoocommercebackendhook-woocommerceorders

解决方案


除了您当前的代码之外,添加woocommerce_prevent_adjust_line_item_product_stock过滤器挂钩

/**
 * Prevent adjust line item
 * 
 * @param $prevent
 * @param $item
 * @param $quantity
 */
function filter_woocommerce_prevent_adjust_line_item_product_stock ( $prevent, $item, $quantity ) {
    // Get order
    $order = $item->get_order();
    
    if ( $order->has_status( 'quote' ) ) {
        $prevent = true;
    }

    return $prevent;
}
add_filter( 'woocommerce_prevent_adjust_line_item_product_stock', 'filter_woocommerce_prevent_adjust_line_item_product_stock', 10, 3 );

推荐阅读