栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

WooCommerce:自动完成付款的订单

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WooCommerce:自动完成付款的订单

最准确,有效和轻巧的解决方案 (适用于WooCommerce 3及更高版本) -2019

该过滤器钩位于:

  • WC_Order
    当在结帐时 需要* 付款,所有付款方法都使用的 类内部
    payment_complete()
    方法。
    ***
  • WC_Order_Data_Store_CPT
    类内部
    update()
    方法。

如您所见,默认情况下, 允许的付款订单状态 为“处理中”和“已完成”。

说明:

  1. 轻巧有效:

由于它是一个过滤器挂钩,

woocommerce_payment_complete_order_status
因此仅在需要在线支付时才触发
(不适用于“支票”,“ bacs”或“ cod”支付方式) 。在这里,我们只更改 允许的已付款订单状态

因此,无需为支付网关或其他任何条件添加条件。

  1. 准确 (避免多次通知)

这是 避免同时发送2个不同的客户通知 的唯一方法:
•一个用于“正在处理”订单状态
•一个用于“已完成”订单状态。

因此,仅在“完成”的订单状态下通知客户一次。

使用下面的代码,只会将 已付款订单状态 (由付款网关为已付款订单设置) 更改为“已完成”:

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

代码进入活动子主题(或活动主题)的function.php文件中。


*2018- *改进版本 (适用于WooCommerce 3及更高版本)

基于Woocommerce官方钩子,我找到了解决此问题的方法*(与WC 3+兼容)。

在Woocommerce对于所有其他支付网关别人比

bacs
(银行转账)
cheque
cod
(货到付款)
支付的订单状态是“处理”和“完成”

因此,我将所有付款网关(如Paypal或信用卡付款)的“处理”订单状态作为目标,以更新订单状态以完成。

编码:

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );function wc_auto_complete_paid_order( $order_id ) {    if ( ! $order_id )        return;    // Get an instance of the WC_Product object    $order = wc_get_order( $order_id );    // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {        return;    }     // For paid Orders with all others payment methods (paid order status "processing")    elseif( $order->has_status('processing') ) {        $order->update_status( 'completed' );    }}

代码进入活动子主题(或活动主题)的function.php文件中。


原始答案 (适用于所有woocommerce版本)

编码:

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );function custom_woocommerce_auto_complete_paid_order( $order_id ) {    if ( ! $order_id )    return;    $order = wc_get_order( $order_id );    // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.    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;    }     // For paid Orders with all others payment methods (with paid status "processing")    elseif( $order->get_status()  === 'processing' ) {        $order->update_status( 'completed' );    }}

代码进入活动子主题(或活动主题)的function.php文件中。

银行电汇,货到付款现金和支票付款方式将被忽略,并保持其原始订单状态。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号