Php 在WooCommerce中购买产品后更改用户角色
我有一个需要建立两个计划(付费)在我的网站上。如果用户购买黄金计划,则应创建一个用户(角色)黄金,并在旅行套餐上给他20%的折扣。如果用户购买白金,wp应为该客户创建“白金”用户角色。现在我在网上找到了代码,但它不起作用:Php 在WooCommerce中购买产品后更改用户角色,php,wordpress,woocommerce,product,user-roles,Php,Wordpress,Woocommerce,Product,User Roles,我有一个需要建立两个计划(付费)在我的网站上。如果用户购买黄金计划,则应创建一个用户(角色)黄金,并在旅行套餐上给他20%的折扣。如果用户购买白金,wp应为该客户创建“白金”用户角色。现在我在网上找到了代码,但它不起作用: add_action( 'woocommerce_order_status_completed', 'wpglorify_change_role_on_purchase' ); function wpglorify_change_role_on_p
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 = 85; // 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 role
$user->remove_role( 'customer' );
// Add role
$user->add_role( 'gold' );
}
}
$product_id = 86; // 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 role
$user->remove_role( 'customer' );
// Add role
$user->add_role( 'platinum' );
}
}
现在我已经将这段代码放在当前活动(子)主题的function.php文件中,但当我测试它并购买产品wordpress时,它会继续创建“客户”用户。
我的代码有问题吗?已更新 您的代码已经过时,并且有一些错误。请尝试以下操作,该操作将在订单完成时根据购买的产品更改用户角色(“已完成”状态): 代码进入活动子主题(或活动主题)的function.php文件。现在应该可以了
更新:当您使用以下代码自动完成订单时:
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
$order->update_status( 'completed' );
}
您可以在其中包含基于特定产品的用户角色更改。因此,请尝试以下代码将替换现有函数:
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) {
if ( ! $order_id ) {
return;
}
// Get an instance of the WC_Order Object
$order = wc_get_order( $order_id );
// Only for logged in "customer" user role
if ( current_user_can( 'customer' ) ) {
$gold_product_id = 85; // specific product ID for "gold" user role
$platinium_product_id = 86; // specific product ID for "platinium" user role
$user_id = $order->get_customer_id(); // The user Id
// Get the WP_User Object
$wp_user = new WP_User( $user_id );
foreach ( $order->get_items() as $item ) {
// For "gold" user role
if ( $gold_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
$user->remove_role( 'customer' ); // Remove 'customer' user role
$user->add_role( 'gold' ); // Add 'gold' user role
}
// For "platinum" user role
elseif ( $platinium_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
$user->remove_role( 'customer' ); // Remove 'customer' user role
$user->add_role( 'platinum' ); // Add 'platinum' user role
}
}
}
$order->update_status( 'completed' );
}
代码进入活动子主题(或活动主题)的function.php文件。这也应该可以,将两个功能合并为一个。谢谢您的回答。我尝试了代码,但系统仍然将新用户注册为“客户”,而不是按所需的角色注册。我用“会员”插件创建了用户角色“黄金”和“白金”。还有什么可能出错?我正在使用此代码自动完成订单:/***自动完成所有WooCommerce订单。*/添加动作('woocommerce'u Thankyu'、'custom'woocommerce'u auto'u complete'u order');函数custom_woocmerce_auto_complete_order('order_id){if(!$order_id){return;}$order=wc_get_order('order_id);$order->update_status('completed');}@Jessica217对不起,我的代码中有一些错误……我已经更新了答案,还添加了第二个选项。试试看,我希望它能起作用。再次感谢。不幸的是,由于某种原因,它不起作用。WP只以“客户”的身份注册黄金和白金用户的新购买@Jessica217我不能做更多,因为我不能真正测试它。
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) {
if ( ! $order_id ) {
return;
}
// Get an instance of the WC_Order Object
$order = wc_get_order( $order_id );
// Only for logged in "customer" user role
if ( current_user_can( 'customer' ) ) {
$gold_product_id = 85; // specific product ID for "gold" user role
$platinium_product_id = 86; // specific product ID for "platinium" user role
$user_id = $order->get_customer_id(); // The user Id
// Get the WP_User Object
$wp_user = new WP_User( $user_id );
foreach ( $order->get_items() as $item ) {
// For "gold" user role
if ( $gold_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
$user->remove_role( 'customer' ); // Remove 'customer' user role
$user->add_role( 'gold' ); // Add 'gold' user role
}
// For "platinum" user role
elseif ( $platinium_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
$user->remove_role( 'customer' ); // Remove 'customer' user role
$user->add_role( 'platinum' ); // Add 'platinum' user role
}
}
}
$order->update_status( 'completed' );
}