37Rb
(Ryan)
1
我的网站使用 DiscourseConnect Provider,因此 Wordpress 管理 Discourse 的登录。
当用户在 Wordpress 中注册时,我希望立即为他们创建一个 Discourse 用户并向他们发送 Discourse 激活电子邮件。但这似乎没有发生。
我已经检查了 Wordpress 设置中的“同步用户数据”选项。
描述似乎表明当用户登录 Wordpress 时会创建一个 Discourse 用户。但我没有看到这种情况发生。直到他们访问 Discourse 网站,才会创建 Discourse 用户。
我的集成是否没有正常工作?或者是我误解了这个描述?
谢谢!
37Rb
(Ryan)
3
我现在明白了。当用户在 WordPress 中“登录”时,它会创建一个新的 Discourse 用户。当用户在 WordPress 中“注册”时,它不会创建新用户。我们的用户可以自行注册,并在注册后立即被视为已登录。因此,此时他们已登录,但没有 Discourse 用户。
如果他们退出 WP 并重新登录 WP,则会创建一个 Discourse 用户。我刚刚验证了这一点。
我们不要求在 WordPress 中验证电子邮件,因为这是一个 WooCommerce 网站,如果用户在未登录的情况下进行购买,它会自动注册他们。他们第一次访问 Discourse(这是我们电子商务网站的支持站点)后,会收到来自 Discourse 的地址验证电子邮件。
有问题用户是同时满足以下两个条件的用户:
- 在 WP 中注册但未退出并重新登录
- 从未访问过 Discourse(这是我们电子商务网站的支持站点)
WordPress/WooCommerce 将自行注册视为登录——他们在注册后立即被视为已登录。是否有办法在用户自行注册时创建 Discourse 用户,而不仅仅是在他们退出并重新登录时创建?
angus
(Angus McLeod)
4
嘿 Ryan,你说得对,该插件是在登录后创建用户的。具体来说,该插件使用了 wp_login 钩子。WordPress 中还有一个 user_register 钩子,但该插件不使用它的原因是,它会在记录插入 WordPress 数据库后立即触发,而不管用户的详细信息(尤其是他们的电子邮件)是否已验证。
有点厚脸皮地说,我认为这里的问题可能是,如果真是这样,为什么 WooCommerce 不触发 wp_login 钩子
但更重要的是,如果 WooCommerce 确实在注册和登录后立即触发了某个钩子或过滤器,那么很可能存在这样的钩子或过滤器。
我们(到目前为止)尚未将此功能内置到插件中的原因是,正如您在自己的案例中可能看到的,WordPress 中有许多不同的用户创建/注册/登录方式。
但让我们看看是否可以解决您的具体案例。首先,我们需要找到一个在您的注册/自动登录发生后立即触发的钩子。您能否确认您的设置方式?即,您使用的具体流程。越具体越好,例如您使用的任何文档。
37Rb
(Ryan)
5
我怀疑是WooCommerce导致了混淆。看起来注册后自动登录是WooCommerce的一个功能,而不是WordPress的功能。而且他们故意不触发登录操作。
我可以搜索一个合适的WooCommerce钩子来使用。如果我找到了合适的WooCommerce钩子,是否有我可以调用的WP Discourse函数或可以触发的钩子来创建Discourse用户?
angus
(Angus McLeod)
6
是的,因此一旦找到合适的钩子,就可以像这样在 Discourse 中创建用户:
$user = get_user_by( 'id', $user_id );
$params = WPDiscourse\\Utilities\\Utilities::get_sso_params( $user );
WPDiscourse\\Utilities\\Utilities::sync_sso_record( $params, $wp_user_id )
我假设在这种情况下您将拥有新用户的 user_id。
2 个赞
37Rb
(Ryan)
7
woocommerce_created_customer 操作似乎运行良好。
除了上面的代码之外,这也有助于将电子邮件地址标记为已验证。
delete_user_meta( $user_id, 'discourse_email_not_verified' );
到目前为止一直有效。感谢您的帮助!!!
1 个赞
system
(system)
关闭
8
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.