我正在尝试自定义发送给用户的通知电子邮件,其中包含设置密码的链接。
目前,我已经在URL上设置了自定义用户注册和登录表单site.com/register
和site.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
如何修复此问题?
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确实感觉有点不舒服,但它应该可以工作。