問題描述

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 呈現的頁面上的設定錯誤。

最佳解決方案

錯誤/通知建立和顯示過程有幾個元件:

  1. add_settings_error()呼叫將專案新增到堆疊 (全域性 $wp_settings_errors 變數) 。

  2. settings_errors 瞬態保持錯誤,使他們生存下來從一頁到另一頁。

  3. settings_errors()功能 get_settings_errors()從記憶體或瞬態中檢索錯誤,然後顯示它們。

這些工作類似於 「設定」API 的魅力,但不幸的是,它們不能設定為通用。另一方面,這是微不足道的。

settings_errors()鉤到 admin_notices 外掛的頁面上,將錯誤程式碼傳遞給它,以便它只顯示您的東西。

手動將錯誤儲存到 settings_errors 瞬態 (將全域性變數填入其中) 。

由於 get_settings_errors()希望提供 GET 引數 ($_GET['settings-updated']),它應該檢查瞬態而不是記憶體,您可以自己提供或從瞬態中獲取錯誤,並在 settings_errors()呼叫之前將其儲存回全域性變數。

更新

你正在把它變成一個混亂的多個問題,所以我會嘗試在這裡解決你的疑慮。

設定 API 與管理頁面配合使用,不會將 「設定」 部分用作基礎。你真正的問題是,在這種情況下,錯誤/通知報告不起作用。

首先,當您釋出表單時,使用 Settings API 設定會發生什麼:

  1. 資料釋出到特殊的 options.php 頁面。

  2. 有資料使用回撥進行消毒/驗證。

  3. 在清理/驗證過程中出現的任何錯誤/通知都將被收集並儲存在瞬時狀態。

  4. 你被重定向到你來的地方。

現在當您載入管理頁面時,它會檢查此頁面是否屬於 「設定」 部分,如果該情況包含微小的 options-head.php 檔案,則會處理檢索和顯示錯誤通知。

所以”not working” 在其他頁面上唯一的事情是後一個步驟,這對你自己來說很簡單,上面介紹了相關的功能 (我可能會介紹過多的細節,你不需要這個基本的情況) 。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。