Обновление уровня членства с помощью pmpro и wp-discourse

Я использовал плагины Discourse и PMPro, а также аддон Zappier для PMPro. Я пытаюсь обновить уровень членства пользователя в Discourse.

Я ожидаю, что при изменении уровня членства любого пользователя через wp-admin это изменение должно отразиться в разделе администратора пользователей на моём сайте Discourse.

Что мне нужно сделать для этого? Дайте, пожалуйста, какие-нибудь идеи.

Вам нужно добавить действие в ваш файл functions.php

/* см. пример на 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 ) {

 . . . . код, который получает уровень членства и группу и добавляет их в группу

}

Пожалуйста, объясните, как получить значения $level_id, $user_id, $cancel_level и название группы для обновлённого пользователя.

Я дал ссылку на документацию. Я полагаю, что они передаются через хук действия.

Привет, Джей, спасибо за ответ. У меня всё заработало, но старое значение всё ещё остаётся. То есть у меня отображаются и новый, и старый уровень членства. Есть ли какие-то идеи, как удалить старое значение уровня членства?

Я использую следующий код:

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

Вот моя функция удаления:

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

        // Удаляет пользователя.
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
        if ( ! empty( $result->success ) ) {
           // Удаляет ключ метаданных уровня членства.
            delete_user_meta( $user_id, "dcpmp_group_{$group_name}" );
        }

        return $result;
    }

    return null;
}

Кажется, в wp-discourse есть функция удаления из группы, которую можно вызвать.

Это та же функция, которую использует [Simon Cossar] (https://meta.discourse.org/u/Simon_Cossar)team. См. эту ссылку:

Manage group membership in Discourse with WP Discourse SSO

Я использовал ту же функцию, но мне нужна помощь. Код я также опубликовал выше, см. предыдущее сообщение.

Вот мой код обновления уровня членства:

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

	// Удаляет пользователя.
    $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
    if ( ! empty( $result->success ) ) {
       // Удаляет ключ метаданных уровня членства.
        delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
    }
    
    $result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );

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

        // Если пользователь добавлен в группу, добавляется пара ключ/значение метаданных, которую можно использовать позже.
        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 );

Я не уверен, что делает эта строка в вашем коде:

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

Это присваивает переменной $groupname объект пользователя Discourse. Думаю, вам нужно удалить эту строку и использовать переменную $group_name, которую вы устанавливаете в первой строке вашего кода.

Я уже использовал это раньше, но это не работает.
Пожалуйста, предоставьте решение.

Если вы хотите, чтобы мы предоставили вам решение, вам нужно будет оплатить наши услуги. Оформите тарифный план хостинга по адресу https://discourse.org/buy