首页 >后端开发 >php教程 >如何根据付款方式自动完成WooCommerce付费订单?

如何根据付款方式自动完成WooCommerce付费订单?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 09:18:18629浏览

How to Automatically Complete Paid WooCommerce Orders Based on Payment Method?

如何为付费 WooCommerce 订单实施条件自动完成

在 WooCommerce 中,虚拟产品经常遇到自动订单完成问题。本综合指南提供了多种解决方案来解决此问题,包括自定义代码片段和插件选项。如需更精细的方法,请考虑基于 WooCommerce 付款方式实现条件代码。

自动完成付款订单的条件代码

根据付款方式有选择地应用自动完成功能,利用 woocommerce_ payment_complete_order_status 过滤器挂钩,该挂钩在结账时需要付款时触发。这是与 WooCommerce 3 及更高版本兼容的改进版本:

add_filter( 'woocommerce_payment_complete_order_status', 'wc_auto_complete_paid_order', 10, 3 );
function wc_auto_complete_paid_order( $status, $order_id, $order ) {
    return 'completed';
}

此代码将除“银行电汇”(bacs)、“货到付款”之外的所有支付网关的允许付款订单状态更改为“已完成” (鳕鱼)和“支票”(支票)。

其他注意事项

  • 此方法避免发送多个客户订单状态更改通知(正在处理至已完成)。
  • 它轻量级且有效,因为它仅在在线支付时触发必需。

替代方案

改进版本(2018)

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {
    // No updates for Bank wire, Cash on delivery, and Cheque
    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
        return;
    } 
    // Autocomplete all others
    else {
        $order->update_status( 'completed' );
    }
}

原始答案(所有 WooCommerce版本)

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
function custom_woocommerce_auto_complete_paid_order( $order_id ) {
    // No updates for Bank wire, Cash on delivery, and Cheque
    if ( ( 'bacs' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cod' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cheque' == get_post_meta($order_id, '_payment_method', true) ) ) {
        return;
    } 
    // Autocomplete all others
    else {
        $order->update_status( 'completed' );
    }
}

注意:请务必将代码片段放在子主题的functions.php 文件中。

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

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