【问题标题】:"woocommerce_can_reduce_order_stock" filter is not working on backend“woocommerce_can_reduce_order_stock”过滤器在后端不起作用
【发布时间】:2020-12-04 15:01:16
【问题描述】:

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

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

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

后端是否有替代挂钩?还是我错过了什么?

【问题讨论】:

    标签: wordpress woocommerce backend hook-woocommerce orders


    【解决方案1】:

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

    【讨论】:

    • 谢谢。不幸的是,它对我不起作用。例如,如果我将订单状态从“已取消”更改为“报价”,库存仍然会减少。这可能是因为它正在检查旧订单状态(已取消)而不是新状态(报价)?我尝试了不同的钩子优先级而不是 10(例如 1 和 20),但结果仍然相同。
    • 确实是这个原因,你可以试试has_status "cancelled",然后你会发现它确实有它的效果。由于订单在前端已经有状态,假设后端也有这个状态。
    • 太棒了!非常感谢你的帮助。对于我的工作流程,我已经能够将“已取消”添加到状态列表中:$order->has_status ( array ('quote', 'cancelled') ) 现在它可以完美运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2014-08-24
    • 2018-01-04
    相关资源
    最近更新 更多