我想为已完成购买的 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' );
}
}
}
已更新
您可以改用以下内容,这将在客户成功购买(付款订单)时更改用户角色:
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' );
是否可以通过在 WooCommerce 中使用优惠券来获取新的用户角色或切换到另一个用户角色(对于现有客户)?