自动将新用户(来自 WP 集成)添加到群组

如果这个问题之前已经有人问过,我在此表示歉意。我正在寻找一种方法,将那些通过 WP 集成(SSO)添加的用户自动添加到某个特定的用户组中。

我未能找到关于如何实现这一点的任何文档,因此任何指导都将不胜感激:slight_smile

保重,期待很快与您交流,

Alex

我假设你正在使用 WP Discourse 插件进行 SSO。该插件提供了一些可用于管理 Discourse 群组成员的函数。请查看 Manage group membership in Discourse with WP Discourse SSO 以了解如何使用这些函数的详细信息。我稍后会更新该主题,添加一个更通用的示例。如果主题中的任何内容不清楚,请告诉我。

嘿,Simon——是的,没错,我正在使用 WP Discourse 插件。感谢你分享这个话题链接,我会留意更新的。不过,如果有帮助的话,具体场景是使用了 WooCommerce Memberships 和 Subscriptions。尽管如此,我本来就打算仅允许付费会员注册,所以只要有一个通用示例能将所有新成员添加到名为 everybody 的群组中即可(仅作为背景说明,这里的目标是让在公告中向成员发送消息和进行标记变得简单)。

保重,稍后聊!

是的,这正是我刚才链接的主题中所缺失的示例。您可以利用 SSO 登录过程中的 add_groups SSO 参数将用户添加到组中。默认情况下,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;
}

您还可以通过 remove_groups SSO 参数将用户从组中移除。

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,其组成员资格才会更新。

太棒了,谢谢 Simon!顺便问一下,能否在其中加入一个 WooCommerce Memberships 的示例?

如果能自动在 WooCommerce 订阅不再有效时将用户移出群组,并在订阅有效时将其加入群组,那将非常有帮助。这样就不需要人工审核,一切都能完全自动化(包括计划取消和重新激活等情况)。因为 Discourse 的权限可以设置为仅允许拥有有效订阅(并属于该脚本所添加的群组)的用户查看或发帖……

如果您能提供任何指导,以便我能转交给开发人员来实现这一功能,那将非常有用。

祝好,

Alex

当 WooCommerce 会员资格过期时,自动将用户从 Discourse 群组中移除应该是可行的。为此,您可以使用我链接到的 remove_user_from_discourse_group 函数。

我对 WooCommerce Memberships & Subscriptions 插件不够熟悉,不知道在创建或取消会员资格时会调用哪些操作钩子。Meta 社区的其他成员可能知道如何实现。您也可以在我们的 Marketplace 分类中创建一个主题,寻找开发人员来协助完成这项工作。

好的,太好了,谢谢你的帮助,Simon。我会去了解一下,看看能否聘请一位有 Discourse 经验的开发者(我也会把这份资料转给他们)。说到这个——出于好奇,你是否有可信赖的专家名单可以推荐,适合这类工作?

我没有本论坛中从事 WordPress/Discourse 集成的成员名单。我很想了解 Meta 社区中有哪些开发者对从事 WordPress/Discourse 集成感兴趣。

我尚未收到关于社区成员在 WordPress 集成方面的任何负面反馈。如果您聘请一位在社区中有良好记录的开发者,通常应该是安全的。我很乐意回答有关在 WP Discourse 插件基础上构建集成的任何问题。如果开发者在开发过程中遇到任何困难,欢迎随时给我发消息。

太好了,我想我稍后会联系你!我可能会把这些改动打包成一个 WP Discourse 插件的小附加组件/扩展,拭目以待吧。:slight_smile: