問題描述
Professional WordPress Plugin Development 書籍詳細介紹瞭如何正確使用 Settings API,並且還演示瞭如何添加菜單和子菜單,但不幸的是,它不提供任何 joined-up 的示例。雖然我已經設法使大部分工作正常,但我無法弄清楚如何在自定義菜單頁面上正確實施 add_settings_error 。這是我的代碼:
function settings_main_validate( $input ) {
$valid['text_string'] = preg_replace( '/[^a-zA-Z]/', '', $input['text_string'] );
if ( $valid['text_string'] != $input['text_string'] ) {
//add_setting_error: $title, $id, $error_message, $class
add_settings_error( 'fields_main_input', 'texterror', 'Incorrect value entered!', 'error' );
}
return $valid;
}
上面的驗證將很好地使用 add_options_page 設置渲染,但不會顯示使用 add_menu_page 呈現的頁面上的設置錯誤。
最佳解決方案
錯誤/通知創建和顯示過程有幾個組件:
-
add_settings_error()調用將項目添加到堆棧 (全局$wp_settings_errors變量) 。 -
settings_errors瞬態保持錯誤,使他們生存下來從一頁到另一頁。 -
settings_errors()功能get_settings_errors()從內存或瞬態中檢索錯誤,然後顯示它們。
這些工作類似於 「設置」API 的魅力,但不幸的是,它們不能設置為通用。另一方面,這是微不足道的。
將 settings_errors()鈎到 admin_notices 插件的頁面上,將錯誤代碼傳遞給它,以便它只顯示您的東西。
手動將錯誤保存到 settings_errors 瞬態 (將全局變量填入其中) 。
由於 get_settings_errors()希望提供 GET 參數 ($_GET['settings-updated']),它應該檢查瞬態而不是內存,您可以自己提供或從瞬態中獲取錯誤,並在 settings_errors()調用之前將其保存回全局變量。
更新
你正在把它變成一個混亂的多個問題,所以我會嘗試在這裏解決你的疑慮。
設置 API 與管理頁面配合使用,不會將 「設置」 部分用作基礎。你真正的問題是,在這種情況下,錯誤/通知報告不起作用。
首先,當您發佈表單時,使用 Settings API 設置會發生什麼:
-
數據發佈到特殊的
options.php頁面。 -
有數據使用回調進行消毒/驗證。
-
在清理/驗證過程中出現的任何錯誤/通知都將被收集並保存在瞬時狀態。
-
你被重定向到你來的地方。
現在當您加載管理頁面時,它會檢查此頁面是否屬於 「設置」 部分,如果該情況包含微小的 options-head.php 文件,則會處理檢索和顯示錯誤通知。
所以”not working” 在其他頁面上唯一的事情是後一個步驟,這對你自己來説很簡單,上面介紹了相關的功能 (我可能會介紹過多的細節,你不需要這個基本的情況) 。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。