如何解决在WooCommerce购买后自动更改用户角色 添加:删除所有以前的角色并分配一个新角色
我想为已完成购买的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',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' );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。