Автоматическое добавление новых пользователей (из интеграции с WP) в группу

Прошу прощения, если этот вопрос уже задавался, но я ищу способ автоматически добавлять пользователей, созданных через интеграцию с WordPress (SSO), в определённую группу пользователей.

Мне не удалось найти никакой документации о том, как это сделать, поэтому буду благодарен за любые рекомендации :slight_smile:

Берегите себя и до скорого,

Алекс

Я предполагаю, что вы используете плагин WP Discourse для SSO. Этот плагин содержит несколько функций, которые можно использовать для управления членством в группах Discourse. Ознакомьтесь с Manage group membership in Discourse with WP Discourse SSO, чтобы узнать подробности о том, как использовать эти функции. Скоро я обновлю эту тему, добавив более общий пример. Дайте знать, если что-то в теме останется непонятным.

Привет, Саймон — да, всё верно, я использую плагин WP Discourse. Спасибо за ссылку на эту тему, я буду следить за обновлением. Если это поможет, конкретный случай касается использования WooCommerce Memberships и Subscriptions. Тем не менее, я всё равно планирую ограничить регистрацию пользователей только платными участниками, так что главное, чтобы это был общий пример, позволяющий добавлять каждого нового участника в группу, которую я назвал everybody (для контекста: цель здесь — просто упростить обмен сообщениями и упоминание участников в объявлениях).

Береги себя и до скорого!

Да, именно этот пример отсутствует в теме, на которую я дал ссылку. Вы можете добавлять пользователей в группу в процессе входа через SSO, используя параметр SSO add_groups. По умолчанию плагин WP Discourse не отправляет этот параметр в полезной нагрузке SSO, но в плагине есть фильтр, который можно использовать для добавления этого параметра в полезную нагрузку SSO.

Следующий код, добавленный в файл functions.php вашей темы или в плагин, должен подойти. Таким образом вы можете добавлять пользователей сразу в несколько групп. Параметр add_groups принимает список названий групп, разделённых запятыми (без пробелов до или после запятых):

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params' );
function wpdc_custom_sso_params( $params ) {
    $params['add_groups'] = 'your_group_name'; 

    return $params;
}

Если вы хотите добавлять в группу только определённых пользователей, функцию можно вызвать следующим образом:

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
    if (/*добавьте здесь условие для проверки, нужно ли добавлять пользователя в группу */) {        
        $params['add_groups'] = 'your_group_name'; 
    }

    return $params;
}

Вы также можете удалять пользователей из групп с помощью параметра SSO remove_groups.

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params' );
function wpdc_custom_sso_params( $params ) {
    $params['remove_groups'] = 'your_group_name'; 

    return $params;
}

или

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
    if (/*добавьте здесь условие для проверки, нужно ли удалять пользователя из группы */) {        
        $params['remove_groups'] = 'your_group_name'; 
    }

    return $params;
}

Основной недостаток этого подхода по сравнению с использованием функции add_user_to_discourse_group, на которую я дал ссылку, заключается в том, что существующим пользователям необходимо выйти из системы, а затем снова войти в Discourse, чтобы их членство в группах было обновлено.

Отлично, спасибо, Саймон! Из любопытства, не слишком ли сложно будет добавить пример для WooCommerce Memberships?

Очень помогло бы, если бы система автоматически исключала пользователей из группы, когда активная подписка WooCommerce больше не действует, и добавляла их только при наличии такой подписки. Тогда не потребуется никакой ручной проверки, и всё будет полностью автоматизировано (например, при отмене и повторной активации тарифов и т. д.). Поскольку права доступа в Discourse можно ограничить так, чтобы люди могли просматривать контент или публиковать сообщения только при наличии активной подписки (и состоять в группе, в которую их добавляет эта интеграция)…

Любые рекомендации, которые я мог бы передать разработчику для реализации этой функции, были бы крайне полезны.

Берегите себя,

Алекс

Должно быть возможно автоматически удалять пользователей из группы Discourse, когда их членство в WooCommerce истекает. Для этого вы можете использовать функцию remove_user_from_discourse_group, на которую я дал ссылку.

Я недостаточно хорошо знаком с плагином WooCommerce Memberships & Subscriptions, чтобы знать, какие хуки действий вызываются при создании или отмене членства. Возможно, другие участники сообщества Meta знают, как это сделать. Вы также можете создать тему в нашей категории Marketplace, чтобы найти разработчика, который поможет с этим.

Отлично, спасибо за это, Саймон. Я разберусь с этим и посмотрю, смогу ли нанять разработчика с опытом работы с Discourse (и передам ему эту информацию). Кстати, по интересам: у вас есть список проверенных экспертов, которых вы могли бы порекомендовать для такой работы?

У меня нет списка участников этого форума, занимающихся интеграцией WordPress и Discourse. Мне было бы интересно узнать, какие разработчики в сообществе Meta заинтересованы в работе с интеграцией WordPress/Discourse.

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

Отлично, полагаю, я свяжусь с вами в какой-то момент! Возможно, в итоге объединю все эти изменения в небольшое дополнение/расширение для плагина WP Discourse, посмотрим. :slight_smile: