在 WooCommerce 中购买时自动更改用户角色

问题描述 投票:0回答:2

我想为已完成购买的 WooCommerce 客户创建一个仅限会员的部分,通过为他们分配一个新角色,因为所有注册用户的默认角色都是“客户”。

我偶然发现了一些可以解决这个问题的代码,但是商店里有超过 200 种产品,单独列出所有产品会很麻烦。

有没有办法为进行任何购买的客户提供新角色?

这是原始代码:

add_action( 'woocommerce_order_status_completed', 'wpglorify_change_role_on_purchase' );

function wpglorify_change_role_on_purchase( $order_id ) {

// get order object and items
    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    $product_id = 56; // that's a specific product ID

    foreach ( $items as $item ) {

        if( $product_id == $item['product_id'] && $order->user_id ) {
            $user = new WP_User( $order->user_id );

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

            // Add new role
            $user->add_role( 'editor' );
        }
    }
}
php wordpress woocommerce orders user-roles
2个回答
1
投票

已更新

您可以改用以下内容,这将在客户成功购买(付款订单)时更改用户角色:

add_action( 'woocommerce_order_status_processing', 'change_role_on_purchase', 10, 2 );
add_action( 'woocommerce_order_status_completed', 'change_role_on_purchase', 10, 2 );
function change_role_on_purchase( $order_id, $order ) {
    $user = $order->get_user(); // Get the WP_User Object

    // Check for "customer" user roles only
    if( is_a( $user, 'WP_User' ) && in_array( 'customer', (array) $user->roles ) ) {
        // Remove WooCommerce "customer" role
        $user->remove_role( 'customer' ); 

        // Add new role
        $user->add_role( 'editor' );
    }
}

代码位于活动子主题(或活动主题)的functions.php 文件中。已测试并有效。

注意:

WC_Order
对象已经是该挂钩函数的现有参数 (代码中缺少)。


添加:删除所有以前的角色并分配新角色

仅使用

WP_User
set_role()
方法就可以做到这一点,因此在代码中,替换:

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

// Add new role
$user->add_role( 'editor' );

作者:

// Reset user roles and set a new one
$user->set_role( 'editor' );

0
投票

是否可以通过在 WooCommerce 中使用优惠券来获取新的用户角色或切换到另一个用户角色(对于现有客户)?

© www.soinside.com 2019 - 2024. All rights reserved.