Не удалось добавить пользователя в группу Discourse

Привет! Я использую плагин WP Discourse для синхронизации пользователей между сайтом на WordPress и сообществом Discourse. Вот код, который я применяю для добавления пользователя в группу Discourse при его регистрации на сайте:

function mepr_capture_new_member_signup_completed($event) {
    $user = $event->get_data();
    $user_id = $user->ID;
    
    // Получение данных пользователя по ID
    $user_data = get_userdata($user_id);
	
    // Логирование отладочной информации о данных пользователя
    log_debug_info("debug_log.txt", "Данные пользователя: ", print_r($user_data, true));

    // Проверка существования данных пользователя
    if ($user_data) {
        // Получение ролей пользователя
        $roles = $user_data->roles;

        // Проверка: есть ли у пользователя роль "browns" или нет
        if (!in_array('browns', $roles) || in_array('browns', $roles)) {
            // Удаление всех существующих ролей
            foreach ($roles as $role) {
                $user_data->remove_role($role);
            }

			// Добавление роли "browns"
			$user_data->add_role('browns');
			log_debug_info("debug_log.txt", "Назначена роль Browns: ", print_r($user_data, true));

			if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
				// Добавление пользователя в группу Discourse для "browns"
				$s2member_level_1_groups = get_option('s2member_level_1_groups', '');
				log_debug_info("debug_log.txt", "Группы уровня 1 s2member: ", print_r($s2member_level_1_groups, true));

				// Убедитесь, что $s2member_level_1_groups не пуст
				if (!empty($s2member_level_1_groups)) {
					$groups = explode(',', $s2member_level_1_groups);
					foreach ($groups as $group) {
						$group = trim($group); // Удаление пробелов из названий групп
						log_debug_info("debug_log.txt", "Попытка добавить пользователя в группу Discourse: ", $group);
						
						$result = DiscourseUtilities::add_user_to_discourse_group($user_id, $group);
						
						if (is_wp_error($result)) {
							$error_message = $result->get_error_message();
							log_debug_info("debug_log.txt", "Не удалось добавить в группу Discourse: ", $error_message);
							log_debug_info("debug_log.txt", "Данные об ошибке: ", print_r($result->get_error_data(), true));
						} else {
							log_debug_info("debug_log.txt", "Успешно добавлено в группу Discourse: ", $group);
						}
					}
				} else {
					log_debug_info("debug_log.txt", "Группы Discourse не найдены в настройках.", "");
				}
			}

            // Дополнительные параметры SSO, если необходимо
            $sso_params = array();
            $sso_params = apply_filters('wpdc_sso_params', $sso_params, $user_data);

        } else {
            // Сбор всех групп уровня
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');

            // Объединение всех групп в один массив
            $s2member_level_groups = array_merge(
                explode(',', $s2member_level_1_groups),
                explode(',', $s2member_level_2_groups),
                explode(',', $s2member_level_3_groups),
                explode(',', $s2member_level_4_groups)
            );

            // Удаление дубликатов
            $s2member_level_groups = array_unique($s2member_level_groups);

            // Удаление пользователя из всех собранных групп
            foreach ($s2member_level_groups as $group) {
                $group = trim($group); // Удаление пробелов из названий групп
                $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);

                if (is_wp_error($result)) {
                    $error_message = $result->get_error_message();
                    log_debug_info("debug_log.txt", "Не удалось удалить из группы Discourse: ", $error_message);
                } else {
                    log_debug_info("debug_log.txt", "Успешно удалено из группы Discourse: ", $group);
                }
            }
        }
    } else {
        // Обработка случаев, когда $user_id или $role не предоставлены
        // Это можно логировать или обрабатывать иначе в зависимости от ваших требований
        // Пока просто выведем сообщение
        error_log("User ID или роль не предоставлены в callback'е user_registered.");
    }
}

add_action('mepr-event-member-signup-completed', 'mepr_capture_new_member_signup_completed');

А вот ответ, который я получаю:

=== Данные пользователя:  ===
WP_User Object
(
    [data] => stdClass Object
        (
            [ID] => 463
            [user_login] => sibahmed
            [user_pass] => $P$BqaZsm5xZuNLEt2oWmypNGQ1QRyoUU0
            [user_nicename] => sibahmed
            [user_email] => sibahmed82@gmail.com
            [user_url] => 
            [user_registered] => 2024-08-04 09:42:50
            [user_activation_key] => 
            [user_status] => 0
            [display_name] => sib ahmed
        )

    [ID] => 463
    [caps] => Array
        (
            [subscriber] => 1
            [browns] => 1
        )

    [cap_key] => wp_capabilities
    [roles] => Array
        (
            [0] => subscriber
            [1] => browns
        )

    [allcaps] => Array
        (
            [read] => 1
            [level_0] => 1
            [upload_files] => 1
            [access_s2member_level0] => 1
            [subscriber] => 1
            [browns] => 1
        )

    [filter] => 
    [site_id:WP_User:private] => 1
)


=== Назначена роль Browns:  ===
WP_User Object
(
    [data] => stdClass Object
        (
            [ID] => 463
            [user_login] => sibahmed
            [user_pass] => $P$BqaZsm5xZuNLEt2oWmypNGQ1QRyoUU0
            [user_nicename] => sibahmed
            [user_email] => sibahmed82@gmail.com
            [user_url] => 
            [user_registered] => 2024-08-04 09:42:50
            [user_activation_key] => 
            [user_status] => 0
            [display_name] => sib ahmed
            [user_level] => 0
        )

    [ID] => 463
    [caps] => Array
        (
            [browns] => 1
        )

    [cap_key] => wp_capabilities
    [roles] => Array
        (
            [0] => browns
        )

    [allcaps] => Array
        (
            [read] => 1
            [browns] => 1
        )

    [filter] => 
    [site_id:WP_User:private] => 1
)


=== Группы уровня 1 s2member:  ===
Member,staff

=== Попытка добавить пользователя в группу Discourse:  ===
Member

=== Не удалось добавить в группу Discourse:  ===
Discourse вернул некорректный ответ

=== Данные об ошибке:  ===
Array
(
    [http_code] => 404
    [http_body] => {"errors":["Запрошенный URL или ресурс не найден."],"error_type":"not_found"}
)


=== Попытка добавить пользователя в группу Discourse:  ===
staff

=== Не удалось добавить в группу Discourse:  ===
Discourse вернул некорректный ответ

=== Данные об ошибке:  ===
Array
(
    [http_code] => 404
    [http_body] => {"errors":["Запрошенный URL или ресурс не найден."],"error_type":"not_found"}
)

Даже при использовании этого класса в верхней части файла functions.php:

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

Пожалуйста, помогите мне разобраться в этой ситуации.

Спасибо!

Привет, не мог бы ты проверить, правильный ли API-ключ и является ли Имя пользователя для публикации администратором? :thinking:

Не могли бы вы рассказать, как опубликовать имя пользователя в WordPress в настройках Discourse или где находится эта настройка? Также я не публикую посты из WordPress в Discourse.

Извините за поздний ответ.

Ваша утилита WP Discourse использует API-ключ и имя пользователя.
Параметры находятся в общих настройках:

Здесь необходимо указать действительный API-ключ и имя пользователя; имя пользователя должно принадлежать администратору.

Можете ли вы проверить, так ли это?