Как отобразить уведомление об ошибке администратора, если настройки сохранены успешно?

Название звучит контр-интуитивно, но неся со мной. :)

У меня есть страница параметров, созданная с помощью API настроек. Когда пользователь вводит неверные данные, я хочу отобразить уведомление об ошибке с помощью вызова add_settings_error().

Но! Чтобы определить, что данные недействительны, мне нужно сделать удаленный вызов API. Этот вызов основан на сохраненных данных. Поэтому я не могу сделать это в обратном вызове санитарии (что рекомендуется для размещения таких уведомлений), потому что мои данные еще не сохранены.

Вместо этого я попытался подключить мой чек в admin_notices. Он отлично работает в большинстве случаев, за исключением одного (и самого важного) случая - при сохранении настроек они всегда сопровождаются родными сохраненными параметрами. и мои пользовательские уведомления полностью игнорируются по какой-то причине.

Итак, как я могу отбросить это сообщение об ошибке, даже если WP считает, что все в порядке?

Edit

Более сфокусированный вопрос - почему именно Настройки сохранены. превосходит любые другие уведомления?

PS Я мог бы попытаться сделать вызов API необязательным, беря данные в качестве аргумента вместо того, чтобы читать его из сохраненной опции, но до сих пор я думаю, что это сделает аргументы чрезмерно громоздкими.

7 голосов | спросил Rarst 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 20:04:35 +0300000000pmMon, 21 Feb 2011 20:04:35 +030011 2011, 20:04:35

2 ответа


4

Хорошо, я думаю, у меня есть идея, что происходит.

  1. Список отображаемых уведомлений извлекается с помощью get_settings_errors() ( источник ).

  2. Эта функция читает уведомления из глобального $wp_settings_errors , если не существует settings_errors, который перехватывает глобальный var.

  3. При сохранении настроек проверяется отсутствие ошибок установки и, если это так, Настройки сохранены. создается уведомление. После этого (в любом случае) ошибки сохраняются в settings_errors переходные (я предполагаю сохранить их при перенаправлении) ( источник ).

В принципе, независимо от того, какие уведомления вы генерируете в своем коде, они будут игнорироваться, когда задан переходный период, и он всегда будет установлен после сохранения настроек.

Что касается меня, было бы целесообразно объединить переходный процесс с глобальной переменной, а не сделать его эксклюзивным или выбором.

И я предполагаю, что для отображения пользовательских уведомлений, когда установлен переходный процесс, мне нужно будет возиться с этим переходным процессом, что, вероятно, не стоит проблем.

ответил Rarst 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 22:10:47 +0300000000pmMon, 21 Feb 2011 22:10:47 +030011 2011, 22:10:47
0

Одна вещь, которую вы могли бы сделать, я думаю:

  • в вашем обратном вызове проверки, прочитайте текущие настройки (вы можете так или иначе сделать это?) и сохраните их в переменной
  • сначала проверьте все остальные значения.
  • , если они недействительны, возвращают ошибки, не проверяют критическое значение
  • , если они есть, сохраните их в db (в пределах вашей функции проверки)
  • выполните вызов удаленного API.
  • проверить достоверное значение
  • , если они действительны, верните всю группу и все хорошее
  • Если нет, сохраните старые настройки, которые вы получили в начале, назад к db, выполните вывод ошибки через add_settings_error() Конечно, это несколько поражает /злоупотребляет API настроек, но это может быть способ.

Изменить: сообщение «Сохраненные настройки» не превзошло ваши другие уведомления, оно скорее появляется только потому, что ваши другие уведомления уже были стерты (по какой-либо причине) из внутреннего хранилища settings_error. Почему это так, я не знаю, но сообщение «Сохраненные настройки» просто добавляется в хранилище ошибок тогда и только тогда, когда оно пустое. Что может повлиять на вашу дилемму, так это то, что всякий раз, когда хранится журнал ошибок настроек (через get_settings_errors()), он также стирается.

ответил wyrfel 21 FebruaryEurope/MoscowbMon, 21 Feb 2011 21:20:04 +0300000000pmMon, 21 Feb 2011 21:20:04 +030011 2011, 21:20:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132