問題描述
我遇到了一個有趣的問題,關於 get_template_part()。
我建立了一個主題選項頁面 (命名為 sitewideSettings.php)
通常我會將它包含在 functions.php 中,如下所示:
include(TEMPLATEPATH."sitewideSettings.php");
工作正常
但現在我試圖使用 get_template_part();
get_template_part('sitewideSettings');
這也是正常工作,除了當點選’update’ 更新設定時,我收到一條錯誤訊息:「你確定要這樣做嗎?請再試一次」 。
「請再試一次」 連結回主題選項頁面,點選更新可以讓您回到錯誤訊息,讓您回到主題選項,並且我們走遍。
除了使用 get_template_part(); 之外,沒有其他的改變
有人遇到這個問題嗎?你是怎麼碰到的?我相信它的東西簡單明瞭,但完全是逃避了我。
(它不是在兩個例項中都建立的 nonce 問題)
最佳解決方案
我知道你說這不是一個問題,但顯然是。該通知是預設的 「這個 nonce 沒有簽出」 訊息。我不知道為什麼隨機性失敗,但這是發生了什麼。
我會仔細檢查你的隨機數是如何建立和檢查的。如果您使用 wp_nonce_field(),請確保操作值和引數值都相同。此外,請雙重檢查變數的拼寫,或任何可能導致隨機數失敗的 scope-related 問題。
EDIT
跟隨你堅持認為這不是一個現在的問題 (這是現實的問題是由範圍問題引起的),這裡’s what’s 可能發生了。包含/必需的檔案在其包含的範圍內執行。我猜想你正在使用一個變數來構建隨機數操作或隨機數字名稱。因為 get_template_part()在該函式的範圍內包含模板檔案,所以不再在管理頁面的顯示回撥範圍內執行。您需要在所有位置全域性化這些變數,或者需要使用常量而不是變數。
次佳解決方案
請不要在管理員/後端使用 get_template_part() 。它被設計用於模板使用 (顯示主題,請參閱 codex),所以這是打算用於主題中的模板和 template-parts:
Function Reference/get template part
Load a template part into a template (other than header, sidebar, footer). Makes it easy for a theme to reuse sections of code in an easy to overload way for child themes.
該功能確實包括一般的原始碼,但是你所經歷的 (正如約翰指出的) 可能與範圍有關。因為我不知道你的程式碼,所以我不能肯定地說,如果這是你所面臨的問題的確切原因 (可變範圍),所以我傾向於在我的答案中保持簡單:
該函式只是不按規定的 php 程式碼替換,例如寫入管理頁面。
所以只要不要使用它,如果你的管理頁面,除非你真的知道你在做什麼。
更新:
如果要在檢視子目錄和父主題目錄時將 php 檔案載入到全域性範圍內,可以使用為您搜尋檔案的功能:locate_template():
Retrieve the name of the highest priority template file that exists.
Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which inherit from a parent theme can just overload one file.
給定的例子包括 include(TEMPLATEPATH."sitewideSettings.php"); 這可以寫成:
include(locate_template('sitewideSettings.php'));
這允許您控制檔案的包含位置和方式 (include /_once; require /_cone),並且阻止您在示例中發生破壞 NONCE 機制的範圍問題。
「請再試一次」 訊息是因為 wp-admin 無法驗證請求,更具體地說是所謂的 nonce 。可能有兩個原因:請求中沒有 (例如,表單不提供任何資訊,或者沒有被管理員程式碼轉移或讀取) 或該隨機數是無效的。永遠代表一連串的動作,如果連鎖被打破,你會得到這個訊息。但是這條訊息並不告訴你那條鏈壞了。
管理員中的這些錯誤訊息並不總是很豐富,甚至可能會導致誤導 (相關:#14060) 。要了解這裡發生了什麼,最有效的是在出現錯誤的系統上進行除錯,因為它可能是相當具體的哪個鏈的哪個部分被破壞。
請參閱 codex,瞭解如何為您的主題或外掛建立管理頁面以獲取更多有關隨機數,管理頁面等的 in-depth 資訊。由於某些原因,管理員請求無法驗證該隨機數。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。