0

我正在将 wordpress 与 woocommerce 一起使用,并且我想自动执行以下步骤。订单完成后,我想将与该订单 ID 关联的用户角色从“客户”更改为“订阅者”。


通过四处搜索,我想我应该能够通过在functions.php中使用一个钩子来实现这一点:

add_action( 'woocommerce_order_status_completed', 'change_role_from_customer_to_subscriber' );

然后添加函数:

function change_role_from_customer_to_subscriber($order_id){
// code to change role to subscriber
}


在代码中,我认为我需要做两件事:
1)获取与该订单 ID 关联的用户 ID
2)将该用户 ID 的角色更改为订阅者


我已经尝试了很多,但我无法让它工作(既没有获得正确的用户 ID,也没有改变用户 ID 的角色)。所以任何帮助将不胜感激!我之前看到过关于堆栈溢出的 2 个相关问题,但不幸的是,那里的答案对我不起作用。我希望有人可以帮助我!

非常感谢!:)

4

2 回答 2

2

来自 wordpress 答案的 Helgatheviking 提出了这段代码:

function wpa_120656_convert_paying_customer( $order_id ) {

$order = wc_get_order( $order_id );

if ( $order->user_id > 0 ) {
    update_user_meta( $order->user_id, 'paying_customer', 1 );
    $user = new WP_User( $order->user_id );

    // Remove role
    $user->remove_role( 'customer' ); 

    // Add role
    $user->add_role( 'subscriber' );
}
}
add_action( 'woocommerce_order_status_completed', 'wpa_120656_convert_paying_customer' );


由于某种未知的原因,它尝试了几次,但它成功了!感谢大家的帮助!:)

于 2013-10-30T22:00:51.237 回答
0

您可以执行以下操作:

$current_user = wp_get_current_user(); 
$user_data = array(
            'ID' => $current_user->ID,
            'role' => 'New Role Here' 
        );
wp_update_user( $user_data );  

将其添加到您的上述函数中,它就可以解决问题。

于 2013-10-30T14:24:51.667 回答