出錯網站 plant.sayit.com.tw
出錯外掛 QR Code Composer 1.8.0
網站後台點擊「立即更新」時,正常情況應該會留在外掛頁面直接完成更新,但這次卻會跳轉到:
/wp-admin/update.php?action=upgrade-plugin...原因是 QR Code Composer 外掛的後台 Footer 程式寫法有問題。
它掛載了 WordPress 的:
admin_footer_textFilter,但函式沒有正確接收並回傳 $text,導致 Footer 文字變成:
NULL之後另一個外掛的函式要求收到的是:
string $text因此產生型別衝突,讓 WordPress 後台 Footer 執行流程中斷。
Footer 沒有正常執行後,WordPress 用來處理外掛 AJAX 更新的:
wp-admin/js/updates.min.js也就沒有被載入。
最後造成:
wp.updates = undefined因此 WordPress 無法使用 AJAX 更新外掛,只能改走傳統的:
update.php?action=upgrade-plugin更新流程。
問題原因
簡單來說就是:
QR Code Composer
↓
admin_footer_text 回傳 NULL
↓
與其他外掛的 string 型別發生衝突
↓
WordPress 後台 Footer 中斷
↓
updates.min.js 沒載入
↓
AJAX 外掛更新功能失效
↓
點更新會跳到 update.php解決方式
QR Code Composer 外掛升級 1.8.0 > 3.0.5 也無效
目前最快的方法是直接停用
這個問題本質上可以記錄為:
WordPress
admin_footer_textFilter 回傳 NULL,造成外掛間 PHP 型別相容性錯誤,進而導致後台 Footer scripts 未載入,讓 Shiny Updates / AJAX 外掛更新失效。