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

时间:2018-06-12 19:29:54

标签: php wordpress woocommerce payment-gateway orders

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

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

来源: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 个答案:

答案 0 :(得分:1)

您最好使用woocommerce_cod_process_payment_order_status专用过滤器挂钩。你必须更换" administrator"您的" 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文件中。经过测试和工作。