修正 WordPress 密碼設置鏈接錯誤

知更鳥
知更鳥
知更鳥
1518
文章
6913
評論
2020年2月23日21:28:11 8 693

當用戶注冊或者忘記密碼獲取新密碼時WordPress會自動向用戶郵箱中發送一個驗證鏈接地址,用戶通過打開這個鏈接設置密碼,不過經常發現這個鏈接直接打開后,并不是設置密碼的正確鏈接。

修正 WordPress 密碼設置鏈接錯誤

修正 WordPress 密碼設置鏈接錯誤

這個問題的并不是WordPress的原因,正常WordPress設置密碼的鏈接地址是沒有超鏈接的,而是QQ郵箱自作聰明為個鏈接地址加上了超鏈接,并把本不是鏈接地址內容的<>符號也加了進去,結果造成鏈接錯誤,貌似只有大家常用的QQ郵箱有此問題。這是一個老生常談問題,網上解決辦法比比皆是,不過都是千篇一律,充分體現了天下文章一大抄。

下面是我的解決方法,以WordPress 5.3.2為例:

一、最簡單的方法

修改WordPress程序文件刪除代碼中的<>符號,

修正忘記密碼獲取新密碼鏈接

打開WordPress程序根目錄的wp-login.php文件,將大約417行的:

$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . ">\r\n";

改為:

$message .= '' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . "\r\n";

只是把代碼中前后<>符號去掉。

修正用戶注冊設置密碼鏈接

打開WordPress程序wp-includes目錄中的pluggable.php文件,將大約2003行的:

$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' ) . ">\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";

也是只需要把代碼中前后<>符號去掉即可。

缺點:升級WordPress程序后,需要再次修改。

二、一勞永逸的方法

這也是本文的重點,也是應主題用戶的要求,添加到目前主題中的方法,這里分享一下。

將下面代碼添加到當前主題函數模板functions.php中即可。

// 修正忘記密碼獲取新密碼鏈接
add_filter('retrieve_password_message', 'zm_reset_password_message_amend', 99, 1);
function zm_reset_password_message_amend($string) {
	return preg_replace('/<(' . preg_quote(network_site_url(), '/') . '[^>]*)>/', '\1', $string);
}

// 修正用戶注冊設置密碼鏈接
add_filter( 'wp_new_user_notification_email' , 'zm_user_notification_email_amend', 10, 3 );
function zm_user_notification_email_amend( $wp_new_user_notification_email, $user, $user_email ) {
	global $wpdb, $wp_hasher;
	$key = wp_generate_password( 20, false );
	do_action( 'retrieve_password_key', $user->user_login, $key );
	if ( empty( $wp_hasher ) ) {
		require_once ABSPATH . WPINC . '/class-phpass.php';
		$wp_hasher = new PasswordHash( 8, true );
	}
	$hashed = time() . ':' . $wp_hasher->HashPassword( $key );
	$wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );
	$switched_locale = switch_to_locale( get_user_locale( $user ) );
	$message = sprintf(__('Username: %s'), $user->display_name) . "\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";
	$wp_new_user_notification_email['message'] = $message;
	return $wp_new_user_notification_email;
}

網上能找到修正重置密碼鏈接的方法,不過代碼略顯拖沓,本文的方法只一句關鍵代碼解決。

至于修正用戶注冊設置密碼鏈接,經過重寫郵件函數解決,貌似代碼還有精簡的余地,以后再研究了。

優點:一勞永逸,不會因為WordPress程序的頻繁升級而再次修改。

如果主機不能發郵件參考:正確配置 WordPress 郵件SMTP

收工,希望通過文本的方法,能幫你解決問題。

 

繼續閱讀
weinxin
關于本站
分享交流WordPress經驗與技巧,關注前端設計與網站制作。僅用于功能演示。
知更鳥
WordPress 5.4 下載 WordPress

WordPress 5.4 下載

WordPress 5.4 2020年3月31日正式發布。中文版也同發布,下載地址: WordPress 5.4中文版:https://cn.wordpress.org/wordpress-5.4-z...
WordPress 只允許游客瀏覽指定分類的文章 WordPress

WordPress 只允許游客瀏覽指定分類的文章

有童鞋問,如何實現未登錄用戶只能瀏覽指定的分類文章,這里提供一下方法。 只允許游客瀏覽指定分類的文章 網上可以找到類似的代碼: //template_redirect動作鉤子是一定會執行的,所以用這個...
盜版主題很可怕! WordPress

盜版主題很可怕!

主題森林相信國內 WordPress 用戶都很熟習,來自該網站的收費主題在國內盜版橫行,一些無良者對主題進行所謂優化、漢化后直接出售,更有甚者居然還有冒充國內代理的。主題森林大部分主題并不像國內主題需...
限制 WordPress 部分用戶角色進入后臺 WordPress

限制 WordPress 部分用戶角色進入后臺

有時我們想限制WordPress 部分用戶角色訪問后臺,可以通過下面的代碼實現。 限制 WordPress 部分用戶角色進入后臺 一、只允許管理員、編輯和作者角色訪問后臺 將下面代碼添加到當前主題函數...
匿名

發表評論

匿名網友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

評論:8   其中:訪客  8   博主  0
    • 簡單生活 簡單生活 3

      不錯,適合開啟注冊功能的網站。前排兜售瓜子飲料礦泉水。

      • 奶爸建網站筆記 奶爸建網站筆記 4

        這個問題碰到好幾年了,不開放注冊所以就不需要修復了。

        • 簡單生活 簡單生活 3

          鳥哥跟go跳轉杠上了,又用回原來了,我覺得還是我用的這版好點 :-D

          • 哈靈游戲 哈靈游戲 2

            贊!!感謝分享

            • 大勇 大勇 0

              感謝分享!!!

              • 調查網 調查網 0

                還真不是一般人能搞定的啊,多謝分享了!

                • 二龍博客 二龍博客 1

                  沒事就來鳥哥這里找找靈感

                  • 才華無限 才華無限 4

                    還沒遇到這種情況。