Wordpress SSO - Restrict Content / user levels / groups

I have WP discourse working for SSO and Restrict Content Pro for subscription, signup, but I am wondering how to set up levels during signup … That carry over to discourse?

Eg reader level 1, contributor level 2, moderator, level 3

So Signup through Wordpress, and level affects group in Discourse?

Are you committed to using Restricted Content Pro? There are quite a few different WordPress membership plugins. My plan is to make a general wp-discourse-groups plugin that will work for most of them, but at the moment I’m making a plugin specifically for the WishList Member plugin. When it’s finished, I think it will do everything that you are looking for.

4 个赞

Thats great! I am opening to using any of them. Keep us posted! : )

Is there no way to do this with current WP Discourse setup?

I’ve written code for some WordPress subscription manager that used API calls to manage groups on WordPress. It shouldn’t be hard to set up WordPress groups that whatever group manager you uses could connect to.

1 个赞

大家好,我重新提起这个旧帖子,因为我的问题适用于 Restrict Content Pro,所以与原始发帖人的情况类似。基本上,我正在协助一个网站,其会员系统使用的是 Restrict Content Pro,我试图为付费的 RCP 会员集成 Discourse 群组同步功能——也就是说,任何拥有会员资格的用户都需要在 Discourse 论坛上同步到 Members 群组。

我花了很多时间尝试让类似 Simon 的 使用 WP Discourse SSO 管理 Discourse 群组会员资格 示例正常运行。目前 SSO 已经正常工作,但会员资格仍然没有同步(即在成功激活会员资格时将用户添加到群组,或在会员资格到期时将其从群组中移除)。

在这个帖子中,我只想实现将新用户添加到 Discourse 群组的功能。该网站的 Discourse 论坛只有一个群组——Members。(移除群组应该不难,因为 Restrict Content Pro 的钩子是相同的,只需将 active 后缀替换为 expired 即可。)Restrict Content Pro 列出了 rcp_transition_membership_status_active 动作钩子,该钩子在会员资格状态发生变化时触发。它包含 $old_status$membership_id 参数。运行 rcp_get_membership() 会返回一个 RCP_Membership 对象(其中包含对 WordPress $user_id 的引用以及其他内容)。

以下是我整理出的最简化版本:


use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// 将用户添加到 'members' Discourse 群组。
function rcpdc_add_member_to_group( $membership_id ) {
    $membership = rcp_get_membership( $membership_id );
    $user_id = $membership->get_user_id();
    DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}

// 确保检查 Discourse 类是否存在。
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    // rcp 动作以 {active} 结尾,每当添加新会员时运行
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}

如果您能看出我明显出错的地方,导致该动作无法正常运行,我将非常感谢您的帮助。谢谢!

哎呀!Restrict Content Pro 那边出了点问题,抱歉。我使用的动作钩子需要两个参数:

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// 将用户添加到 'members' Discourse 群组。
function rcpdc_add_member_to_group( $old_status, $membership_id ) {
    $membership = rcp_get_membership( $membership_id );
    $customer = $membership->get_customer();
    $user_id = $customer->get_user_id();
    DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}

// 请务必检查 Discourse 类是否存在。如果不存在,而你禁用了 wp-discourse 插件,这将导致网站崩溃。
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group', 10, 2 );
}

经过上述修改后,add_action 应该可以正常工作了,但我在使用 add_user_to_discourse_group 函数时仍然没有成功。

新激活的会员仍未被成功添加到 Members 群组中,因此如果有任何人能提供建议,我将不胜感激。谢谢。

1 个赞

如果可能,请在您的 WordPress 服务器上创建一个 debug.log 文件,然后从您的 rcpdc_add_member_to_group 函数中向该文件写入日志。这样您可以确认该函数是否被调用,并检查您创建的变量是否被赋予了正确的值。

对于调试,我通常使用这里描述的方法:Debugging in WordPress – Advanced Administration Handbook | Developer.WordPress.org debug.log 文件,并将其添加到您的 wp-content 目录中。

1 个赞

谢谢,Simon!问题完美解决了。我的代码已经能正常运行了。原来包裹在动作周围的代码阻止了 add_action 执行该函数。一旦我移除了

if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {

并只保留 add_action 本身,插件就正常工作了。我其实不太担心这个检查,因为我是这个网站唯一的管理员。所以现在,无论是添加还是移除组成员,同步功能都运行得完美无缺。

再次感谢你快速而有帮助的回复。

1 个赞

感谢您关注此事。我已在插件中添加了处理私有分类下评论的选项。遗憾的是,本周时间紧张,未能完成该功能。该选项将加入插件的下一个更新版本中。我会在下周初尽快完成。

2 个赞