自定义wp_new_user_Notify_Email()

时间:2018-06-21 作者:Nigel

我正在尝试自定义发送给用户的通知电子邮件,其中包含设置密码的链接。

目前,我已经在URL上设置了自定义用户注册和登录表单site.com/registersite.com/login 分别地

注册后,wordpress将发送一封电子邮件,其中包含以下链接,要求设置密码。

site.com/wp-login.php?action=rp&key=XYieERXh3QinbU4VquB2&login=user%40gmail.com

我希望它将此url替换为

site.com/login?action=rp&key=XYieERXh3QinbU4VquB2&login=user%40gmail.com

我在中尝试了以下代码functions.php

add_filter( \'wp_new_user_notification_email\', \'my_wp_new_user_notification_email\', 10, 3 );

function my_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {

    $message = sprintf(__(\'Username: %s\'), $user->user_login) . "\\r\\n\\r\\n";
    $message .= __(\'Hello To set your password, visit the following address:\') . "\\r\\n\\r\\n";
    $message .= \'<\' . network_site_url("login/?key=$key&login=" . rawurlencode($user->user_login), \'login\') . ">\\r\\n\\r\\n";


    $wp_new_user_notification_email[\'message\'] = $message

    return $wp_new_user_notification_email;

}
我想我失踪了$key 收到电子邮件后的信息有如下链接:

site.com/login?action=rp&key=&login=user%40test.com

如何修复此问题?

2 个回复
SO网友:Dimitris Siakavelis

您需要使用get_password_reset_key 作用(see reference) 它将查询数据库并返回用户的重置密码密钥。

下面是一个完整的工作示例:

add_filter( \'wp_new_user_notification_email\', \'custom_wp_new_user_notification_email\', 10, 3 );

function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
    $key = get_password_reset_key( $user );
    $message = sprintf(__(\'Welcome to the Community,\')) . "\\r\\n\\r\\n";
    $message .= \'To set your password, visit the following address:\' . "\\r\\n\\r\\n";
    $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), \'login\') . "\\r\\n\\r\\n";
    $message .= "After this you can enjoy our website!" . "\\r\\n\\r\\n";
    $message .= "Kind regards," . "\\r\\n";
    $message .= "Support Office Team" . "\\r\\n";
    $wp_new_user_notification_email[\'message\'] = $message;

    $wp_new_user_notification_email[\'headers\'] = \'From: MyName<[email protected]>\'; // this just changes the sender name and email to whatever you want (instead of the default WordPress <[email protected]>

    return $wp_new_user_notification_email;
}

SO网友:Andy Macaulay-Brook

您需要能够将生成的键分配给变量$key, 目前尚未定义。

您可以通过将另一个函数附加到retrieve_password_key 操作,该操作在WordPress生成键后立即激发。从它的名字来看,我认为它的存在就是为了这个目的。

function wpse306642_stash_key( $user_login, $key ) {
    global $wpse306642_new_user_key;
    $wpse306642_new_user_key = $key;
}

add_action( \'retrieve_password_key\', \'wpse306642_stash_key\', 10, 2 );
然后更换$key 在您的功能中$wpse306642_new_user_key, 在函数开始时将其声明为全局。

使用global just for this确实感觉有点不舒服,但它应该可以工作。

结束

相关推荐

Register email as username

我在Wordpress多站点中使用Wordpress 4.9.4,我需要允许用户使用其电子邮件地址作为用户名进行注册。查看代码,我发现阻止我完成的是ms函数。php有一个正则表达式过滤除a-z以外的其他字符的用户名,因此当电子邮件是用户名时,我会得到“用户名只能包含小写字母(a-z)和数字。”我在ms函数中更改了该正则表达式。php,它工作得很好。现在我的问题是,我不想每次更新wordpress时都重新编码wpmu\\u validate\\u user\\u signup函数。在这个问题上有什么好的做法