【发布时间】:2018-04-10 22:37:18
【问题描述】:
我正在使用两种产品类型开发 WooCommerce。我需要其中一些($products_to_check)来创建一个特定的角色帐户(订阅者),其余的需要另一个(客户,这是 WooCommerce 的默认帐户)。
问题是,如果我有一个已经是客户的用户,我不希望他将其角色更改为订阅者(所以我检查他是否已登录,这意味着他不是新客户并且之前定义了角色)。另一方面,如果订阅者购买了 $products_to_check 中未包含的产品之一,他应该获得角色升级(从订阅者到客户)。
这是我的功能,它不起作用,但我真的不知道为什么。
add_action( 'woocommerce_order_status_completed', 'change_role_on_purchase' );
function change_role_on_purchase( $order_id ) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
$products_to_check = array( ... );
$user = new WP_User( $order->user_id );
$user_meta = get_userdata( $order->user_id );
$user_roles = $user_meta->roles;
foreach ( $items as $item ) {
if ( $order->user_id > 0 && in_array( $item['product_id'], $products_to_check ) ) {
if (!is_user_logged_in()){
$user->set_role( 'subscriber' );
}
}
elseif ( $order->user_id > 0 && !(in_array( $item['product_id'], $products_to_check)) ) {
if (is_user_logged_in() && in_array('subscriber', $user_roles)){
$user->set_role( 'customer' );
}
}
}
}
非常感谢您在此问题上的任何帮助。我做错了什么?
【问题讨论】:
-
那么现在发生了什么?您的功能根本不起作用?
-
没有。当一个新用户从 $products_to_check 购买东西时,他被注册为客户......
标签: php wordpress woocommerce