使用 WooCommerce 订单转换状态挂钩添加用户角色
Add a user role using WooCommerce order transition status hooks
我需要为我最近注册的用户添加一个新角色(在购买我的四个特定订阅产品中的任何一个时)。到目前为止,每个最近注册的用户(购买订阅产品的用户)都会获得订阅者角色。如果他们购买了我的 4 个目标订阅产品中的任何一个,我希望他们成为订阅者 + 广告商。
我曾尝试使用 woocommerce_order_status_completed
、woocommerce_order_status_processing
和 woocommerce_order_status_changed
钩子,但其中 none 正在使用我的代码。
我已经多次修改这些钩子中的函数和代码,但没有什么特别之处。
到目前为止,我一直在使用这个代码。
add_action( 'woocommerce_order_status_completed', 'so_29647785_convert_customer_role' );
function so_29647785_convert_customer_role( $order_id ) {
$order = new WC_Order( $order_id );
if ( $order->user_id > 0 ) {
foreach ( $order->get_items() as $order_item ) {
if( 4008 == $order_item[ 'product_id' ] ) {
$user = new WP_User( $order->user_id );
// Add new role
$user->add_role( 'advertiser' );
}
}
}
}
我将不胜感激任何帮助或跟踪。
我也尝试过此代码,它有助于创建具有订阅者 + 广告商角色的用户,但我不能这样做。因为只有当用户购买我的四种目标订阅产品时,我才需要他们同时注册订阅者和广告商角色。虽然此代码同时向每个新用户添加订阅者 + 广告商,而不管他们选择的产品如何。
add_filter('woocommerce_new_customer_data', 'bbloomer_assign_custom_role', 10, 1);
function bbloomer_assign_custom_role($args) {
$args['role'] = 'advertiser';
return $args;
}
非常感谢任何帮助!
add_action( 'woocommerce_order_status_completed', 'add_advertiser_role' );
function add_advertiser_role( $order_id ) {
$order = new WC_Order( $order_id );
if ( $order->get_user_id() > 0 ) {
foreach ( $order->get_items() as $order_item ) {
if( 4008 == $order_item->get_product_id() ) {
$user = new WP_User( $order->get_user_id() );
// Add new role
$user->add_role( 'advertiser' );
}
}
}
}
从 Woocommerce 3 开始,您的代码已经过时,并且您的代码中存在一些错误和错误,例如 $order_item['product_id']
将无法正常工作……改为尝试以下操作:
add_action( 'woocommerce_order_status_processing', 'order_status_change_add_user_role', 10, 2 );
add_action( 'woocommerce_order_status_completed', 'order_status_change_add_user_role', 10, 2 );
function order_status_change_add_user_role( $order_id, $order ) {
if ( $order->get_user_id() > 0 ) {
$user = $order->get_user(); // Get an instance of the WP_User object
foreach ( $order->get_items() as $item ) {
// Check that user role is not set yet and that is matching with a product ID
if( 4008 == $item->get_product_id() && ! in_array('advertiser', $user->roles) ) {
$user->add_role( 'advertiser' ); // Add new role
break; // Stop the loop
}
}
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。现在应该可以使用了。
自 Woocommerce 3 以来相关的订单和订单商品:
我需要为我最近注册的用户添加一个新角色(在购买我的四个特定订阅产品中的任何一个时)。到目前为止,每个最近注册的用户(购买订阅产品的用户)都会获得订阅者角色。如果他们购买了我的 4 个目标订阅产品中的任何一个,我希望他们成为订阅者 + 广告商。
我曾尝试使用 woocommerce_order_status_completed
、woocommerce_order_status_processing
和 woocommerce_order_status_changed
钩子,但其中 none 正在使用我的代码。
我已经多次修改这些钩子中的函数和代码,但没有什么特别之处。
到目前为止,我一直在使用这个代码。
add_action( 'woocommerce_order_status_completed', 'so_29647785_convert_customer_role' );
function so_29647785_convert_customer_role( $order_id ) {
$order = new WC_Order( $order_id );
if ( $order->user_id > 0 ) {
foreach ( $order->get_items() as $order_item ) {
if( 4008 == $order_item[ 'product_id' ] ) {
$user = new WP_User( $order->user_id );
// Add new role
$user->add_role( 'advertiser' );
}
}
}
}
我将不胜感激任何帮助或跟踪。
我也尝试过此代码,它有助于创建具有订阅者 + 广告商角色的用户,但我不能这样做。因为只有当用户购买我的四种目标订阅产品时,我才需要他们同时注册订阅者和广告商角色。虽然此代码同时向每个新用户添加订阅者 + 广告商,而不管他们选择的产品如何。
add_filter('woocommerce_new_customer_data', 'bbloomer_assign_custom_role', 10, 1);
function bbloomer_assign_custom_role($args) {
$args['role'] = 'advertiser';
return $args;
}
非常感谢任何帮助!
add_action( 'woocommerce_order_status_completed', 'add_advertiser_role' );
function add_advertiser_role( $order_id ) {
$order = new WC_Order( $order_id );
if ( $order->get_user_id() > 0 ) {
foreach ( $order->get_items() as $order_item ) {
if( 4008 == $order_item->get_product_id() ) {
$user = new WP_User( $order->get_user_id() );
// Add new role
$user->add_role( 'advertiser' );
}
}
}
}
从 Woocommerce 3 开始,您的代码已经过时,并且您的代码中存在一些错误和错误,例如 $order_item['product_id']
将无法正常工作……改为尝试以下操作:
add_action( 'woocommerce_order_status_processing', 'order_status_change_add_user_role', 10, 2 );
add_action( 'woocommerce_order_status_completed', 'order_status_change_add_user_role', 10, 2 );
function order_status_change_add_user_role( $order_id, $order ) {
if ( $order->get_user_id() > 0 ) {
$user = $order->get_user(); // Get an instance of the WP_User object
foreach ( $order->get_items() as $item ) {
// Check that user role is not set yet and that is matching with a product ID
if( 4008 == $item->get_product_id() && ! in_array('advertiser', $user->roles) ) {
$user->add_role( 'advertiser' ); // Add new role
break; // Stop the loop
}
}
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。现在应该可以使用了。
自 Woocommerce 3 以来相关的订单和订单商品: