Hi Eva, I went over your code and there’s no errors that I can spot - and I totally get your frustration. If it hadn’t been for Simon Cossar I don’t know how I’d have resolved it myself.
So, taking it backwards: if the PHP is correct, then something else must be disconnected. (browniepoints for me, yay.)
But…
I don’t know enough about any of that to be able to give suggestions or help.
If you’ve got your forum parked with the boys from Discourse Hosting, you could ask Richard (his name tag won’t pop, but this is his profile: Profile - RGJ - Discourse Meta )
Or perhaps @simon might be able to provide you with the missing steps.
Keeping my fingers crossed for you.
edit:
p.s. these are all the related plug-ins i use (+ that PHP one)
(Memberpress Drip is email marketing, so not related to this)
groups are any and all: closed and opened (i don’t give access to hidden groups, come to think of it)
these are some of the group names as displayed in ‘Groups’ - and as you can see, the “NoSpacesNames” are the ones that coincide with the PHP settings
If by parameters you mean the following, then no:
nor in the actual group settings (where you create it, with name, owner, etc.), it’s all straight forward and not connected to accessing through SSO - so setting or not setting this as a person’s primary group is not relavant.
There is one webhook here on Discourse that I put in as instructed by the WP-Discourse plugin:
email verification technically goes via memberpress: they (my wp-instance) send the log-in details to the user. by clicking the log-in link the users verify their address.
i know for a fact that it’s not through Discourse, because for a while it ALSO went through discourse (glitch somewhere) and Richard sorted that for me.
Возможно ли с помощью этого метода назначать пользователям уровень доверия 2 в Discourse при регистрации через оплату и понижать его до уровня 1 в случае отсутствия ежемесячной оплаты?
Я давно не смотрел на это, но вам понадобится взаимодействие между кодом вашего Discourse и кодом платежной системы (в моём случае — MemberPress).
Таким образом, если человек перестаёт платить, MemberPress меняет его код, и этот код соответствует другому уровню группы.
Если связи с платежом нет, уровень группы не будет скорректирован.
О, подождите.
Повторно перечитав ваш вопрос: я не уверен, как это работает с уровнями доверия…
но… если всё остальное не сработает, вы можете легко создать ГРУППУ, установленную на уровень доверия 2, и другую — на уровень доверия 1, а ваш плагин членства будет назначать эти группы вашим участникам.
Надеюсь, это поможет. Если нет, мне придётся снова вникнуть в детали. Система работает с момента предыдущего обсуждения, и я больше к ней не обращался.
Этот вопрос возник в другом посте на Meta сегодня, поэтому я изучил код, чтобы подтвердить, может ли уровень доверия пользователя быть снижен путём добавления его в группу, устанавливающую нижний уровень доверия, чем текущий уровень пользователя. Изучив код, я вижу, что это невозможно:
def grant
if @user.trust_level < @trust_level
@user.change_trust_level!(@trust_level)
@user.save!
end
end
Если уровень доверия пользователя ниже, чем уровень доверия, предоставляемый группой, добавление пользователя в группу обновит его уровень доверия. В противном случае изменений в уровне доверия пользователя не произойдёт.
Я немного забыл (да и время позднее), но уровень доверия здесь не так важен. Я вообще не использую уровни доверия. Группа TL 2 имеет доступ к «этому», а группа TL 1 — нет.
Сам уровень доверия не используется. Любой участник может иметь уровень доверия 1 и всё равно получить доступ (через оплату) к группе TL 4 — при условии, что я настраиваю разрешения не для уровней доверия, а только для групп.
@Dani1, спасибо, что поделились своим опытом и трудностями здесь, это очень полезно для других пользователей MemberPress, таких как я.
Это действительно логично, но мне интересно, что произойдет, если подписка участника истечет, а он не выйдет из системы и продолжит получать доступ к группе… Сталкивались ли вы с такой проблемой?
Если да, то интересно, есть ли способ принудительно обновить сессию или выйти из системы…
Если пользователь обновляется через обычный процесс входа SSO, обновление не произойдет, пока он не выйдет из системы и не войдет снова. Приведенный выше пример кода — самый простой способ решить проблему, но, вероятно, не лучший вариант для управления членством в группах.
Плагин WP Discourse включает несколько вспомогательных функций, которые активируются, когда WordPress выступает в качестве провайдера SSO для Discourse. Эти функции позволяют обновлять членство в группах без необходимости выхода пользователя из Discourse. Они описаны в теме, на которую дал ссылку Ричард: Manage group membership in Discourse with WP Discourse SSO.
В посте, на который ссылался Ричард, приведены некоторые подробности о двух разных подходах. На следующей неделе я добавлю эти детали в тему howto. Пока же будет полезно прочитать этот пост.
(Очевидно, что всё это очень вручную. У меня всего несколько человек, и я точно знаю, чем каждый занимается. Я ещё не пробовал решение Ричарда, но хорошо знать, что оно есть!)
Можете ли вы, пожалуйста, добавить сюда ссылку, когда это произойдёт? Спасибо!
Конечно, тема находится здесь: Manage group membership in Discourse with WP Discourse SSO. В ней описывается, как использовать функции WP Discourseadd_user_to_discourse_group и remove_user_from_discourse_group. Предполагается, что ваш сайт WordPress настроен как провайдер SSO для Discourse; именно эти функции следует использовать для управления членством в группах на Discourse.
В примере, приведённом в этой теме, используется плагин PaidMembershipsPro, но аналогичный подход должен работать с любым хорошо написанным плагином членства для WordPress.
Я добавлю в тему некоторые детали о том, как управлять членством в группах с помощью параметров SSO add_groups и remove_groups. В большинстве случаев управление членством в группах путём добавления этих параметров в полезную нагрузку SSO не является лучшим решением, поскольку это требует, чтобы пользователи вышли из системы и снова вошли в Discourse, прежде чем их членство в группах будет обновлено.
Я надеюсь, что в ближайшем будущем появится готовое решение для связывания Discourse с конкретными плагинами членства WordPress. В настоящее время это можно сделать только путём добавления небольшого количества пользовательского кода на ваш сайт WordPress. Если вы обычно не занимаетесь подобными задачами, возможно, вам потребуется нанять разработчика для помощи в этом.
Я согласен — мне больше нравится, когда добавление/удаление групп происходит динамически, а не при выходе и последующем входе пользователя.
Если мне не удастся разобраться, я найму здесь разработчика, чтобы он это сделал, и поделюсь кодом. Кажется, в разделе маркетплейса есть пара таких специалистов.