Intereting Posts
Внедрение общей таблицы содержимого на одностраничных страницах сообщений Meta Query вызывает несколько типов сообщений, основанных на ACF-полях, после обновления до WP 4.1 Программно добавьте меню навигации и пункты меню используя меню walker для добавления классов и атрибутов к элементам WordPress Jquery Confliction с плагином Как исправить архив.php, который отображает все сообщения? Как удалить типу пользовательских почтовых сообщений? Обратный URL-адрес детской темы Я получаю 0 после результата моих запросов ajax Использование tax_query создает 1 = 0 или 1 = 1 в запросе $ wp_query-> Последние 5 сообщений (пользовательский тип сообщения), каждый пост по-разному CSS Существуют ли официальные или неофициальные рекомендации по стилю виджета? Создание пользовательских ролей пользователя Как настроить заголовок, передав строку запроса? Пользовательские возможности пользовательской почты Wp не работают togather

Как следует реализовать add_settings_error на пользовательских страницах меню?

В книге разработки плагинов WordPress Professional подробно объясняется, как правильно использовать API-интерфейс настроек, а также демонстрирует, как добавлять меню и подменю, но, к сожалению, он не дает каких-либо объединенных примеров этого. Хотя мне удалось добиться большей части работы, я не могу понять, как правильно реализовать 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 .

Solutions Collecting From Web of "Как следует реализовать add_settings_error на пользовательских страницах меню?"

Существует несколько компонентов для создания и отображения ошибок / уведомлений:

  1. add_settings_error() для добавления элемента в стек (глобальная переменная $wp_settings_errors ).
  2. settings_errors transient, который сохраняет ошибки, чтобы они выживали, переходя от страницы к странице.
  3. settings_errors() get_settings_errors() для извлечения ошибок из памяти или переходного процесса, а затем их отображения.

Они работают как атрибут для API настроек, но, к сожалению, они не предназначены для общего использования. С другой стороны, тривиально обойти это.

Hook settings_errors() на admin_notices на странице вашего плагина, передайте код ошибки, чтобы он показывал только ваши вещи.

Вручную сохранить ошибки в settings_errors transient (просто введите в нее эту глобальную переменную).

Поскольку get_settings_errors() ожидает подсказки в параметрах GET ( $_GET['settings-updated'] ), что он должен проверять переходный процесс вместо памяти, вы можете либо предоставить это, либо получить ошибки от переходного процесса самостоятельно и сохранить их обратно в глобальную переменную до ваших settings_errors() .

Обновить

Вы превращаете это в битву с несколькими вопросами, поэтому я постараюсь решить ваши проблемы здесь.

API настроек работает с страницами администратора, которые не используют раздел «Настройки» в качестве базы. Ваша реальная проблема заключается в том, что в этом случае сообщение об ошибке / уведомлении не работает.

Сначала вот что происходит, когда вы публикуете форму, настроенную с помощью API настроек:

  1. Данные отправляются на специальную страницу options.php .
  2. Там данные дезинфицируются / проверяются с помощью обратного вызова.
  3. Любые ошибки / уведомления, возникающие при санитации / валидации, собираются и сохраняются в переходный период.
  4. Вы перенаправляетесь обратно туда, откуда вы пришли .

Теперь, когда вы загружаете страницу администратора, она проверяет, принадлежит ли эта страница разделу «Настройки», и если этот случай включает в себя крошечный файл options-head.php , который занимается извлечением и отображением уведомлений об ошибках.

Таким образом, единственное, что «не работает» на других страницах – это последний шаг, который тривиально делать сам с обзором связанной функции выше (я, вероятно, слишком подробно рассказывал о переходных процессах, вам это не понадобится для основного случая).

Немного поздно, но я только что прошел через это. Основываясь на коде OP, лучшим решением, которое я нашел, является вставка этого кода:

 function your_admin_notices_action() { settings_errors( 'fields_main_input' ); } add_action( 'admin_notices', 'your_admin_notices_action' ); 

Это добавит отображение уведомления администратора на страницы администратора, созданные с помощью страницы add_menu_page

Просто добавление

 include_once 'options-head.php'; 

к моей функции $-функции пользовательского меню, казалось, отлично работает для отображения сообщений об ошибках на пользовательских страницах меню.