来自电子邮件的WordPress多站点用户激活挂钩

时间:2020-02-13 作者:StripyTiger

我已经创建了一个自定义注册页面,要求提供电子邮件、用户名和其他俱乐部的会员号码。

在创建用户之前,我使用api检查新用户是否是俱乐部的现有成员,并接收该成员记录的id号。

我想把它存储在Wordpress用户那里,所以我把它保存在元数据中。

这是一个多站点,因此我使用以下代码。

$user_meta = array(\'add_to_blog\' => get_current_blog_id(), \'new_role\' => \'subscriber\', \'club_id\' => $club_id);

\\wpmu_signup_user($Username, $Email, apply_filters( \'add_signup_meta\', $user_meta ) );
这一切都正常,我可以在wp\\U注册表中看到我的数据,并发送确认电子邮件。

使用未经确认的插件,我还可以看到我的新用户正在等待确认。

然后我进行了设置,以便在确认帐户后,club\\u id也会传输到用户元详细信息。

function activate_user($user_id, $password, $meta)   {
    if (isset($meta["club_id"]))
        update_user_meta( $user_id, "club_id", $meta["club_id"]);    
}

add_action(\'wpmu_activate_user\',\'activate_user\',10,3);
如果我使用未经确认的插件激活帐户,这会像预期的那样工作,但如果用户使用电子邮件中的链接,则不会。创建用户,发送所有电子邮件,但club\\u id未存储在用户元中,因为未调用此挂钩。

我有办法避开这件事吗?

1 个回复
最合适的回答,由SO网友:Rup 整理而成

正如评论中所讨论的,修复方法是将wpmu\\u activate\\u用户挂钩放入must-use plugin 在/wp-content/mu-plugins/下。

问题是电子邮件的激活链接处理程序,wp-activate.php, 定义

define( \'WP_INSTALLING\', true );
(我想是为了说明它是在新配置的站点的上下文中运行的?)如果设置了此选项,则wp load不会加载标准插件:wp_get_active_and_valid_plugins() 返回空数组。

因此,您的挂钩没有在wp激活案例中注册。因此,为了确保加载并运行此代码,我们必须使用mu插件,即使在安装情况下也会无条件加载。

相关推荐

如何清理wp-content/plugins/wordpress-seo中不必要的文件?

我目前维护Wordpress网站7年。磁盘使用率最近已满,因此我需要定期检查自动备份并保存这些备份,然后将其从服务器中删除。当我检查时,插件文件夹中的wordpress seo文件夹(这是Yoast seo默认插件文件夹)占用了太多空间。据我所知,它充满了各种版本的插件文件。确切地说,它位于wordpress seo插件的js/dist文件夹中。它包含几种类型的小型javascript,每个名称的末尾都有某种序列或版本号,总容量约为250-300 MB。我可以清理这些文件吗?如果是,是否安全?如果我从以前