根据 Woocommerce 中的用户角色更改 COD 支付网关的默认订单状态

Posted

技术标签:

【中文标题】根据 Woocommerce 中的用户角色更改 COD 支付网关的默认订单状态【英文标题】:Change default order status for COD payment gateway based on user role in Woocommerce 【发布时间】:2018-11-22 06:50:09 【问题描述】:

在 Woocommerce 中,当支付选项为 COD 时,订单直接进入“处理中”状态。

来源:https://docs.woocommerce.com/document/managing-orders/#prettyPhoto

我需要它像这样工作,除非客户的角色是“X”。

我已经看到可以用这段代码解决这个问题:

function cod_payment_method_order_status_to_onhold( $order_id ) 
    if ( ! $order_id )
        return;

    $order = wc_get_order( $order_id );

    if (  get_post_meta($order->id, '_payment_method', true) == 'cod' )
        $order->update_status( 'on-hold' );


add_action( 'woocommerce_thankyou', 'cod_payment_method_order_status_to_onhold', 10, 1 );

但是,问题在于它经过“处理”,发送电子邮件,然后进入“保留”状态。我想避免发送“处理中”邮件

有什么办法吗?谢谢!

【问题讨论】:

【参考方案1】:

您最好使用woocommerce_cod_process_payment_order_status 专用过滤器挂钩。您必须将“管理员”用户角色替换为“X”角色。

钩子函数代码:

add_filter( 'woocommerce_cod_process_payment_order_status', 'set_cod_process_payment_order_status_on_hold', 10, 2 );
function set_cod_process_payment_order_status_on_hold( $status, $order ) 
    $user_data = get_userdata( $order->get_customer_id() );
    if( ! in_array( 'administrator', $user_data->roles ) )
        return 'on-hold';
    return $status;

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

优秀的解决方案。非常感谢!

以上是关于根据 Woocommerce 中的用户角色更改 COD 支付网关的默认订单状态的主要内容,如果未能解决你的问题,请参考以下文章

根据在 Woocommerce 中购买的总商品更改用户角色

根据 Woocommerce 中的用户角色自定义客户新帐户邮件

根据 WooCommerce 3+ 中的用户角色添加自定义我的帐户菜单项

如何根据用户角色隐藏具有给定类别的 WooCommerce 产品

WooCommerce 中的购物车总数是不是为 0 时未显示付款方式

Woocommerce 注册中的附加用户角色选择字段