如果这个问题之前已经有人问过,我在此表示歉意。我正在寻找一种方法,将那些通过 WP 集成(SSO)添加的用户自动添加到某个特定的用户组中。
我未能找到关于如何实现这一点的任何文档,因此任何指导都将不胜感激:slight_smile
保重,期待很快与您交流,
Alex
如果这个问题之前已经有人问过,我在此表示歉意。我正在寻找一种方法,将那些通过 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 插件的小附加组件/扩展,拭目以待吧。![]()