"woocommerce_can_reduce_order_stock" 过滤器在后端不工作

"woocommerce_can_reduce_order_stock" filter is not working on backend

我有一个名为 'quote' 的自定义订单状态,我添加了以下代码以尝试防止具有此状态的订单的库存水平下降。

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 );

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

是否有用于后端的替代挂钩?还是我漏掉了什么?

除了您当前的代码之外,添加 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 );