首页 >后端开发 >php教程 >如何针对特定付款方式自动完成 WooCommerce 订单?

如何针对特定付款方式自动完成 WooCommerce 订单?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-17 20:53:11945浏览

How to Automate WooCommerce Order Completion for Specific Payment Methods?

在 WooCommerce 中自动完成特定付款方式的已付款订单

WooCommerce 通常会自动完成虚拟产品的订单。但是,某些付款方式,例如“银行电汇”、“货到付款”和“支票”,需要有条件的方法。

woocommerce_ payment_complete_order_status 过滤器挂钩

此问题的最佳解决方案是利用 woocommerce_ payment_complete_order_status 过滤器挂钩,付款时所有付款方式都会使用该挂钩。结帐时需要。

使用过滤器挂钩的条件代码

以下代码利用过滤器挂钩并根据付款方式有条件地应用状态更改:

add_filter('woocommerce_payment_complete_order_status', 'wc_auto_complete_paid_order', 10, 3);
function wc_auto_complete_paid_order($status, $order_id, $order)
{
    // Check if the payment method is not "Bank wire," "Cash on delivery," or "Cheque."
    if (!in_array($order->get_payment_method(), array('bacs', 'cod', 'cheque'))) {
        // If not, change the order status to "completed."
        return 'completed';
    }

    // Otherwise, do not modify the order status.
    return $status;
}

通过使用此过滤钩子,您可以根据付款方式有效、准确地更新已付款订单的状态,而无需触发多个通知客户。

替代方案

代码片段:

如果您要定位的付款方式仅限于那些默认情况下不触发自动完成(“银行电汇”、“货到付款”和“支票”),您可以使用以下代码:

add_action('woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1);
function custom_woocommerce_auto_complete_paid_order($order_id)
{
    $order = wc_get_order($order_id);

    // Check if the payment method is not "Bank wire," "Cash on delivery," or "Cheque."
    if (!in_array($order->get_payment_method(), array('bacs', 'cod', 'cheque'))) {
        // If not, update the order status to "completed."
        $order->update_status('completed');
    }
}

插件:

“WooCommerce 自动完成订单”插件还可以为特定付款方式提供解决方案。但是,它可能不适用于某些信用卡网关。

以上是如何针对特定付款方式自动完成 WooCommerce 订单?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn