Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据Woocommerce中的用户角色更改COD支付网关的默认订单状态_Php_Wordpress_Woocommerce_Payment Gateway_Orders - Fatal编程技术网

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

Php 根据Woocommerce中的用户角色更改COD支付网关的默认订单状态,php,wordpress,woocommerce,payment-gateway,orders,Php,Wordpress,Woocommerce,Payment Gateway,Orders,在Woocommerce中,当支付选项为COD时,订单直接进入“处理”状态 资料来源: 我需要这样工作,除非客户的角色是“X” 我发现这可以通过以下代码解决: function cod_payment_method_order_status_to_onhold( $order_id ) { if ( ! $order_id ) return; $order = wc_get_order( $order_id ); if ( get_post_met

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

资料来源:

我需要这样工作,除非客户的角色是“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 );
然而,问题是它经过“处理”,发送电子邮件,然后进入“暂停”。我想避免发送“处理”邮件


有办法吗?谢谢大家!

您最好使用
woocmerce\u cod\u process\u payment\u order\u 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文件。经过测试,效果良好。

非常好的解决方案。非常感谢!