php - 编辑默认的 Wordpress 密码重置电子邮件
问题描述
所以我首先尝试使用retrieve_password_message过滤器,但不幸的是我在网站上输入电子邮件时没有收到任何回复,也没有发送任何电子邮件。(顺便说一句,我正在使用 OceanWP 弹出登录)
add_filter( 'retrieve_password_message', 'my_retrieve_password_message', 10, 4 );
function my_retrieve_password_message( $message, $key, $user_login, $user_data ) {
$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
$message = __( 'Die Passwortzurücksetzung wurde für das folgende Konto beantragt:' ) . "\r\n\r\n";
/* translators: %s: site name */
$message .= sprintf( __( 'Name der Website: %s' ), $site_name ) . "\r\n\r\n";
/* translators: %s: user login */
$message .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n\r\n";
$message .= __( 'Wenn dies ein Fehler war, ignorieren Sie diese E-Mail einfach, und es wird nichts passieren.' ) . "\r\n\r\n";
$message .= __( 'Um Ihr Passwort zurückzusetzen, besuchen Sie die folgende Adresse:' ) . "\r\n\r\n";
$message .= '<https://smartinvestor.de/wp-login.php?action=rp&key=' . $key . '&login=' . rawurlencode( $user_login) . ">\r\n";
return $message;
}
我有一种感觉,它与 $user_login 有关。所以我然后尝试从过滤器中重建数据。现在用户收到回复并发送电子邮件(上面的代码我没有收到),但不幸的是登录似乎有问题。$user_login 不起作用,它只是返回空白,这意味着密码重置 url 不起作用。
如果我手动输入登录名,则 url 有效,确认它与密钥无关。我的理论是,因为用户名不是修剪后的电子邮件,所以它返回错误?如何在不从电子邮件中获取 user_login 的情况下获取它。
add_filter('retrieve_password_message', 'my_reset_password_message', null, 2);
function my_reset_password_message( $message, $key ) {
if ( strpos($_POST['user_login'], '@') ) {
$user_data = get_user_by('email', trim($_POST['user_login']));
} else {
$login = trim($_POST['user_login']);
$user_data = get_user_by('login', $login);
}
$user_login = $user_data->user_login;
$msg = __('The password for the following account has been requested to be reset:'). "\r\n\r\n";
$msg .= network_site_url() . "\r\n\r\n";
$msg .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
$msg .= __('If this message was sent in error, please ignore this email.') . "\r\n\r\n";
$msg .= __('To reset your password, visit the following address:');
$msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');
return $msg;
}
解决方案
我建议使用钩子本身提供的 user_login,试试这样。
add_filter("retrieve_password_message", "my_reset_password_message", 99, 4);
function my_reset_password_message($message, $key, $user_login, $user_data ) {
$message = "The password for the following account has been requested to be reset:
" . sprintf(__('%s'), $user_data->user_email) . "
If this was a mistake, just ignore this email and nothing will happen.
To reset your password, visit the following address:
" . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";
return $message;
}
我检查了您在您的网站上使用的重置邮件表格。对于用户名/电子邮件字段,您使用“opl_user_or_email”而不是“user_login”,因此 user_login 字段为空,您可以更改表单并将“opl_user_or_email”替换为“user_login”,我建议您这样做,或者您可以替换 $_POST[ "user_login"] 在你的第二种方法中使用 $_POST["opl_user_or_email"]。
推荐阅读
- node.js - nodejs crypto createDecipheriv 抛出“ERR_OSSL_EVP_WRONG_FINAL_BLOCK_LENGTH”
- html - 是否可以使用引导程序将图标(fontawesome)作为按钮?
- flutter - 获取导航器堆栈长度(股票代码)
- windows - 如何在运行 (B).exe 之前 clodr (A).exe
- javascript - Javascript 回调与安全性方面的承诺
- javascript - 如何将变量从 HTML 文件传递到 JavaScript 文件
- python - 服务器端每秒接收的问题帧
- javascript - 在 Tampermonkey/Greasemonkey 中使用 Javascript 在 Facebook Messenger 网页版上禁用 Enter 提交文本
- swift - 如何在我的视图控制器上检测跨多个视图的触摸事件?
- python - 为什么它显示错误的数字?