Как изменить роль пользователя при оплате и присвоить подписку с PaidMemberships Pro?

Всем привет, у меня стоят 3 хука
1. Завершает платеж через woocomerce
2. При завершение платежа меняет роль пользователя
3. Не корректно работает, при изменение вторым хуком роли пользователя не присваевает ему уровень подписки, помогите исправить!
p.s Если изменить роль пользователя на customer в settings/users, то ему присваевается подписка!

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 );

        if( $order->has_status( 'processing' ) ) {
            $order->update_status( 'completed' );
        }
    }
    

function lgbk_add_member( $order_id) {


$order = new WC_Order( $order_id );
$items = $order->get_items();

foreach ( $items as $item ) {
    $product_name = $item['name'];
    $product_id = $item['product_id'];
    $product_variation_id = $item['variation_id'];
}

if ( $order->user_id > 0 && $product_id == '12429' ) {
	update_user_meta( $order->user_id, 'paying_customer', 1 );
	$user = new WP_User( $order->user_id );

	// Remove role
	$user->remove_role( 'subscriber' ); 

	// Add role
	$user->add_role( 'customer' );
	

	}
}

add_action( 'woocommerce_order_status_completed', 'lgbk_add_member');


function assign_pmpro_level_to_role($user_id, $role, $old_roles)
{
	global $current_user;
	//checks if the user doesn't have a membership level yet			
	if(!$current_user->user_id) {

		//we found a role related to pmpro level
		if($role == "customer")
		{
			pmpro_changeMembershipLevel(6, $user_id); //gives default customers the level 20 free registration membership
		}
	}
}
 
add_action('set_user_role', 'assign_pmpro_level_to_role', 10, 3);
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Хук set_user_role отсутствует в методе add_role, он присутствует в методе set_role;

Вам надо так
function assign_pmpro_level_to_role($user_id, $role)
{
  global $current_user;
  //checks if the user doesn't have a membership level yet			
  if(!$current_user->user_id) {

    //we found a role related to pmpro level
    if($role == "customer")
    {
      pmpro_changeMembershipLevel(6, $user_id); //gives default customers the level 20 free registration membership
    }
  }
}
 
add_action('add_user_role', 'assign_pmpro_level_to_role', 10, 2);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы