你好,有没有办法将 Discourse 中的用户字段映射到 WordPress 的用户元数据?
我在 WordPress 中有一个注册表单,它会保存元数据。我希望在创建用户时将这些数据复制到 Discourse,并在个人资料中显示。理想情况下,还能在“介绍”分类中显示预填充的编辑器。
谢谢
你好,有没有办法将 Discourse 中的用户字段映射到 WordPress 的用户元数据?
我在 WordPress 中有一个注册表单,它会保存元数据。我希望在创建用户时将这些数据复制到 Discourse,并在个人资料中显示。理想情况下,还能在“介绍”分类中显示预填充的编辑器。
谢谢
我想我找到了解决方法,但每次更新后都需要在 wp-discourse 插件中进行修改:
如果 @simon 能在插件设置中实现这一功能那就太好了,基本上就是提供一种将 WordPress 中的自定义字段名称映射到 Discourse 的方法。
除非你完全清楚自己在做什么,否则不建议直接修改插件的代码。WP Discourse 插件设计为允许通过插件或主题使用操作钩子进行扩展。这样你可以在不修改插件代码的情况下进行自定义,从而避免在更新插件时被覆盖。
要向发送到 Discourse 的 SSO 载荷中添加数据,请使用 wpdc_sso_params 过滤器。挂钩到此过滤器的函数会接收两个参数:$params(传递给 Discourse 的 SSO 参数数组)和 $user(WordPress 用户对象)。
以下帖子中有一个使用该过滤器的示例:
如果你在利用该过滤器添加自定义用户字段数据时遇到问题,请随时告诉我。
谢谢!是否有包含插件中调用的所有钩子的文档?
谢谢
目前没有,但应该有。我会尽快处理这个问题。
我需要编写一个 Discourse 插件来读取 SSO 参数并将其保存到用户字段中,还是该功能已经实现了?
您可以通过 SSO 更新您在 Discourse 中创建的用户字段。这不需要安装插件。为此,您需要知道 Discourse 在数据库中用于自定义字段的名称。我知道的最简单的方法是进入您的管理后台 / 自定义 / 用户字段页面,然后加载该页面的 JSON 版本。例如:https://forum.example.com/admin/customize/user_fields.json
该页面的 JSON 数据大致如下所示:
{
user_fields: [
{
id: 12,
name: "News Letter",
description: "Send me a newsletter",
field_type: "confirm",
editable: false,
required: true,
show_on_profile: false,
show_on_user_card: false,
position: 3
},
{
id: 13,
name: "Company",
description: "Where do you work?",
field_type: "text",
editable: true,
required: false,
show_on_profile: true,
show_on_user_card: true,
position: 4
}
]
}
用户自定义字段的命名格式为 user_field_<field_id>。这意味着,在我的 JSON 示例中,“News Letter”字段的名称是 user_field_12,“Company”字段的名称是 user_field_13。请使用这些信息来更新 SSO 负载。
例如,结合我上一篇文章中提到的 wpdc_sso_params 过滤器,将以下代码添加到您主题的 functions.php 文件中,即可在用户通过 SSO 登录时将所有用户的“Company”字段设置为“acme”。请将函数名中的 my_namespace 替换为您网站的唯一命名空间:
add_filter( 'wpdc_sso_params', 'my_namespace_set_discourse_custom_field', 10, 2 );
function my_namespace_set_discourse_custom_field( $sso_params, $user ) {
$sso_params['custom.user_field_13'] = 'acme';
return $sso_params;
}
若要添加基于您网站 WordPress 用户数据的字段,请使用该函数的 $user 参数来获取有关用户的详细信息。
运行完美,再次感谢!
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.