如何修正 WordPress 密碼設置鏈接錯誤

下面由WordPress教程欄目給大家介紹修正 wordpress 密碼設置鏈接錯誤的方法,希望對需要的朋友有所幫助!

如何修正 WordPress 密碼設置鏈接錯誤

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

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

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

一、最簡單的方法

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

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

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

$message?.=?'rn";

改為:

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

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

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

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

$message?.=?'user_login?),?'login'?)?.?">rnrn";

改為

$message?.=?''?.?network_site_url(?"wp-login.php?action=rp&key=$key&login="?.?rawurlencode(?$user->user_login?),?'login'?)?.?"rnrn";

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

缺點:升級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('/]*)>/',?'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)?.?"rnrn"; $message?.=?__('To?set?your?password,?visit?the?following?address:')?.?"rnrn"; $message?.=?''?.?network_site_url("wp-login.php?action=rp&key=$key&login="?.?rawurlencode($user->user_login),?'login')?.?"rnrn"; $wp_new_user_notification_email['message']?=?$message; return?$wp_new_user_notification_email; }

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

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

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

更多編程相關內容,請關注php中文網wordpress教程欄目!

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享