Atualize o nível de assinatura com o pmpro e o wp-discourse

Eu já usei o Discourse e o PMPro, além do addon do Zapier do PMPro. Estou tentando atualizar o nível de assinatura do meu usuário no Discourse.

Espero que, ao alterar o nível de assinatura de qualquer usuário pelo wp-admin, essa alteração seja refletida na seção de usuários do administrador do meu site Discourse.

O que preciso fazer para conseguir isso? Dê-me algumas ideias sobre como proceder.

Você precisará adicionar uma ação ao seu functions.php

/* veja o exemplo em http://hookr.io/actions/pmpro_after_change_membership_level/ */
do_action( 'pmpro_after_change_membership_level', $level_id, $user_id, $cancel_level );
function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {

 . . . . código que obtém o nível de assinatura e o grupo e os adiciona ao grupo

}

Você pode explicar como obter $level_id, $user_id, $cancel_level e o nome do grupo para o usuário atualizado?

Eu vinculei à documentação. Acredito que eles são passados pelo hook de ação.

Oi Jay, obrigado pela sua resposta. Funcionou para mim, mas o valor antigo ainda está lá. Ou seja, tenho ambos os valores: o novo nível de associação e o nível antigo de associação. Você tem alguma ideia de como remover o valor antigo do nível de associação?

Estou usando o seguinte:

DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );

Essa é a minha função de remoção:

function dcpmp_remove_member_from_group( $level_id, $user_id, $cancel_level ) {
    if ( ! empty( $cancel_level ) ) {
        $group_name = dcpmp_get_level_for_id( $cancel_level );
        if ( is_wp_error( $group_name ) ) {

            return null;
        }

        // Remove o usuário.
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
        if ( ! empty( $result->success ) ) {
           // Remove a chave de metadados do nível de associação.
            delete_user_meta( $user_id, "dcpmp_group_{$group_name}" );
        }

        return $result;
    }

    return null;
}

Acho que existe uma função de remover do grupo no wp-discourse que você pode chamar.

Esta é a mesma função usada por Simon Cossarteam. Veja este link:

Manage group membership in Discourse with WP Discourse SSO

Eu usei a mesma função e preciso de ajuda. Também postei o código acima.

Este é o meu código de atualização de nível de associação:

function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {

		$group_name = dcpmp_get_level_for_id( $level_id );
		if ( is_wp_error( $group_name ) ) {

			return null;
		}
		$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );
	
		// Remove o usuário.
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
        if ( ! empty( $result->success ) ) {
           // Remove a chave de metadados do nível de associação.
            delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
        }
	    
        $result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );

        if ( ! empty( $result1->success ) ) {

            // Se o usuário foi adicionado ao grupo, adicione um par chave/valor de metadados que poderá ser usado posteriormente.
            add_user_meta( $user_id, "dcpmp_group_{$group_name}", 1, true );
        }

        
return $result;
        return $result1;
	
}
add_action( 'pmpro_after_change_membership_level', 'action_pmpro_after_change_membership_level', 10, 3 );

Não tenho certeza do que esta linha no seu código está fazendo:

$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );

Isso atribuirá a $groupname um objeto de usuário do Discourse. Acredito que você precise remover essa linha e usar a variável $group_name que você está definindo na primeira linha do seu código.

Já usei isso antes, mas não está funcionando.
Por favor, forneça uma solução.

Se você quiser que nós lhe proporcionemos uma solução, precisará nos pagar. Inscreva-se em um plano de hospedagem em https://discourse.org/buy