문제

WordPress 알림을 위해 HTML 사용자 정의 전자 메일 템플릿을 사용하고 있습니다.

모든 템플릿이 잘 작동합니다.어떤 이유로, 암호 재설정 템플리트 (그렇지 않으면 잘 작동하는)는 암호 재설정 링크의 끝에있는 user_login 변수를 추가하지 않습니다. 이는 키가 유효 할 키가 중요합니다.$user_login가없는 링크는 WP 암호 재설정 페이지에서 "유효하지 않은 키"오류를 렌더링합니다.

링크의 문자열의 예가 아래에 있습니다.

url/wp-login.php?redirect_to=url?action=rp&key=12345678910&login=http://url.com/wp-login.php?redirect_to=url?action=rp&key=12345678910&login=
.

여기에 템플릿을 수정하는 데 사용하는 코드가 있습니다.누군가가 왜 이것이 일어나는지 알고 있고 그렇다면 어떻게 해결할 수 있습니까?

add_filter ('retrieve_password_message', 'custom_retrieve_password_message', 10, 2);
function custom_retrieve_password_message($content, $key) {
global $wpdb;
$user_login = $wpdb->get_var("SELECT user_login FROM $wpdb->users WHERE user_activation_key = '$key'");
ob_start();
$email_subject = custom_retrieve_password_title();
include('email_header.php');
?>

<p>It looks like you need to reset your password for your account!</p>
<p>To reset your password, visit the following address, otherwise just ignore this email and nothing will happen.<p>
<a href="<?php echo wp_login_url("url") ?>?action=rp&key=<?php echo $key ?>&login=<?php echo $user_login ?>">Reset password</a> 

<?php
include('email_footer.php');
$message = ob_get_contents();
ob_end_clean();
return $message;
}
.

도움이 되었습니까?

해결책 3

관심있는 사람을 위해 또 다른 해결책입니다.

add_filter ('retrieve_password_message', 'custom_retrieve_password_message', 10, 2);
function custom_retrieve_password_message($content, $key) {
global $wpdb;
if ( empty( $_POST['user_login'] ) ) {
     wp_die('<strong>ERROR</strong>: Enter a username or e-mail address.');
 } else if ( strpos( $_POST['user_login'], '@' ) ) {
     $user_data = get_user_by( 'email', trim( $_POST['user_login'] ) );
 }else if(!empty( $_POST['user_login'] )){
     $user_data = get_user_by('login', trim( $_POST['user_login']));
 }elseif ( empty( $user_data ) ){
     wp_die('invalid_email', __('<strong>ERROR</strong>: There is no user registered with that email address.'));
 }
$user_login_name=$user_data->user_login;
ob_start();
$email_subject = 'Your password has been changed';
include('email_header.php');
?>
<p>It looks like you need to reset your password. <br/>To reset your password, <a href="<?php echo wp_login_url("url") ?>?action=rp&key=<?php echo $key ?>&login=<?php echo $user_login_name; ?>">click here</a>, otherwise just ignore this email and nothing will happen.<p>

<?php
include('email_footer.php');
$message = ob_get_contents();
ob_end_clean();
return $message;
}
.

다른 팁

문제는 WordPress가 사용자가 활성화 키가 데이터베이스에 저장되는 방식을 변경한다는 것입니다.키는 WP_USERS 테이블에 저장되기 전에 해시되어 있으며 $key에는 변경되지 않은 일반 텍스트 활성화 키가 들어 있습니다.따라서 다음 코드 줄이 결과를 가져 오지 않을 것이고 $user_login가 비어 있습니다.

$user_login = $wpdb->get_var("SELECT user_login FROM $wpdb->users WHERE user_activation_key = '$key'");
.

이 대신 시도해보십시오 :

add_filter ('retrieve_password_message', 'custom_retrieve_password_message', 10, 2);
function custom_retrieve_password_message($content, $key) {
global $wpdb;
$user_data = get_user_by_email(trim($_POST['user_login']));
$user_login = $user_data->user_login;
ob_start();
$email_subject = custom_retrieve_password_title();
include('email_header.php');
?>

<p>It looks like you need to reset your password for your account!</p>
<p>To reset your password, visit the following address, otherwise just ignore this email and nothing will happen.<p>
<a href="<?php echo wp_login_url("url") ?>?action=rp&key=<?php echo $key ?>&login=<?php echo $user_login ?>">Reset password</a> 

<?php
include('email_footer.php');
$message = ob_get_contents();
ob_end_clean();
return $message;
}
.

나는 모든 나머지를 완전히 확신하지 못한다.-하지만 한 가지 때문에 따옴표를 맞추어야합니다.시도해보십시오

echo wp_login_url('url')
.

가 아닙니다

echo wp_login_url("url")
.

e.g.:

<a href="<?php echo wp_login_url('url') ?>?action=rp&key=<?php echo $key ?>&login=<?php echo $user_login ?>">Reset password</a> 
.

또는 시도

echo '<a href=' . wp_login_url("url") . '?action=rp&key='.$key.'&login='.$user_login.'>Reset password</a> ';
.

또한 - (그리고 그것이 도움이 없다면) 당신이 그것을 사용하는 곳에서 더 자세히 설명 할 수 있습니다, 어떻게 템플릿을 사용하고 깊이 깊이 깊이 있고 파고 할 수 있습니까?

또한 게시물 데이터를 사용하여 사용자 이름 또는 이메일이 제출되었는지 확인합니다.

add_filter ('retrieve_password_message', 'custom_retrieve_password_message', 10, 2);
  function custom_retrieve_password_message($content, $key) {
    if ( username_exists($_POST['user_login']) ){
    $user_login = $_POST['user_login'];
} else {
    $user_data = get_user_by_email(trim($_POST['user_login'])); 
    $user_login = $user_data->user_login;
}
    ob_start();
...
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top