# Невозможно добавить пользователя в форум Discourse с сайта WordPress, когда пользователь добавлен в членство

**URL:** https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025
**Category:** Development
**Created:** [19.Март.2024 16:54:32 UTC](https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025 "2024-03-19T16:54:32Z")
**Posts on this page:** 5
**Page:** 2

<div class="post-metadata">

### Author: ![Haseeb\_Ahmed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haseeb_ahmed/32/372254_2.png) [@Haseeb\_Ahmed](https://meta.discourse.org/u/Haseeb_Ahmed)
#### Post date: [20.Май.2024 12:25:52 UTC](https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025/21 "2024-05-20T12:25:52Z")

</div>

и в моих настройках в Discourse WP я использую провайдера [Discourse Connect](https://meta.discourse.org/t/13045?silent=true)

---

<div class="post-metadata">

### Author: ![Haseeb\_Ahmed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haseeb_ahmed/32/372254_2.png) [@Haseeb\_Ahmed](https://meta.discourse.org/u/Haseeb_Ahmed)
#### Post date: [30.Июль.2024 17:44:16 UTC](https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025/22 "2024-07-30T17:44:16Z")

</div>

Привет, @simon @Firepup650, после долгого перерыва мне снова нужна помощь.

Вот мой код:

```plaintext
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
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));
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
            log_debug_info("debug_log.txt", "Результат добавления в группу Discourse: ", print_r($result, true));
}

            // Дополнительные параметры 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) {
                $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
                // Здесь можно обработать $result по необходимости
            }
        }
    } else {
        // Обработка случаев, когда $user_id или роль не предоставлены
        // Это можно логировать или обрабатывать иначе в зависимости от требований
        // Пока просто запишем сообщение в лог
        error_log("User ID или роль не предоставлены в callback user_registered.");
    }
}

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

Теперь проблема в том, что пользователь не добавляется в группу Discourse, вот вывод кода:

```

=== Данные пользователя: ===  
WP\_User Object  
(  
[data] =\> stdClass Object  
(  
[ID] =\> 457  
[user\_login] =\> sibahmed  
[user\_pass] =\> $P$BTVeX1n6d40NtHBCiQqzSphMolH/hH0  
[user\_nicename] =\> sibahmed  
[user\_email] =\> [sibahmed82@gmail.com](mailto:sibahmed82@gmail.com)  
[user\_url] =\>  
[user\_registered] =\> 2024-07-30 17:35:51  
[user\_activation\_key] =\>  
[user\_status] =\> 0  
[display\_name] =\> sib ahmed  
)

```
[ID] => 457
[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] =\> 457  
[user\_login] =\> sibahmed  
[user\_pass] =\> $P$BTVeX1n6d40NtHBCiQqzSphMolH/hH0  
[user\_nicename] =\> sibahmed  
[user\_email] =\> [sibahmed82@gmail.com](mailto:sibahmed82@gmail.com)  
[user\_url] =\>  
[user\_registered] =\> 2024-07-30 17:35:51  
[user\_activation\_key] =\>  
[user\_status] =\> 0  
[display\_name] =\> sib ahmed  
[user\_level] =\> 0  
)

```
[ID] => 457
[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

=== Результат добавления в группу Discourse: ===  
WP\_Error Object  
(  
[errors] =\> Array  
(  
[wpdc\_response\_error] =\> Array  
(  
[0] =\> Неверный ответ получен от Discourse  
)

```
    )

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

    )

[additional_data:protected] => Array
    (
    )

```

)

```plaintext

```

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [30.Июль.2024 20:33:18 UTC](https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025/23 "2024-07-30T20:33:18Z")

</div>

В данный момент я не занимаюсь разработкой на WordPress, поэтому не могу протестировать ваш код. Думаю, проблема здесь:

` $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);`

Если я правильно читаю логи, этот вызов возвращает:

```plaintext
[error_data] => Array
    (
        [wpdc_response_error] => Array
            (
                [http_code] => 404
                [http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
            )

```

Скорее всего, проблема в том, что на вашем сайте Discourse нет группы с названием `"Member"`.

Не уверен, что вы делаете здесь, но я не думаю, что это связано с ошибкой:

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

```

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [31.Июль.2024 07:28:47 UTC](https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025/24 "2024-07-31T07:28:47Z")

</div>

Привет @Haseeb_Ahmed, я перенёс эту тему в #Development, так как суть её заключается в помощи с написанием кода на PHP. Возможно, на следующей неделе у меня будет время внимательнее посмотреть твой код.

---

<div class="post-metadata">

### Author: ![Haseeb\_Ahmed](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haseeb_ahmed/32/372254_2.png) [@Haseeb\_Ahmed](https://meta.discourse.org/u/Haseeb_Ahmed)
#### Post date: [31.Июль.2024 18:33:19 UTC](https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025/25 "2024-07-31T18:33:19Z")

</div>

Привет @simon, даже если я изменю название группы, ответ всё равно остаётся таким же:

```plaintext

=== s2member level 1 groups: ===
staff

=== Discourse Group Addition Result: ===
WP_Error Object
(
    [errors] => Array
        (
            [wpdc_response_error] => Array
                (
                    [0] => An invalid response was returned from Discourse
                )

        )

    [error_data] => Array
        (
            [wpdc_response_error] => Array
                (
                    [http_code] => 404
                    [http_body] => {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
                )

        )

    [additional_data:protected] => Array
        (
        )

)

```

[Предыдущая страница](https://meta.discourse.org/t/i-cannot-add-user-to-the-discouse-forum-from-a-wordpress-website-when-user-added-in-a-membership/300025.md?page=1)
