Intereting Posts
По умолчанию фильтр по категориям сбрасывает ошибку базы данных Есть ли способ заставить ssl на определенных страницах Новые данные регистрации пользователя, импортированные на страницу Возможность пользователя для любимого или «подобного» контента Где находится правильный файл .mo в репозитории языков? Определение URI для плагинов Сжатие Google PageSpeed ​​Enable Compression не работает? изменить виджет, чтобы отображать выдержку вместо содержимого Контекстно-ориентированные виджеты. Моя работа продолжается Как поместить Stack Exchange Flair в качестве виджета? Цикл ACF и форматирование php Каков наиболее эффективный способ включить этот javascript только в одном сообщении? «Pre_get_posts» срабатывает при каждом запросе Назначение правильной ссылки на блог, который является частью веб-сайта shortcodes – стиль или изменение / удаление квадратных скобок?

Уведомление администратора не отображается

Я новичок в разработке WordPress и пытаюсь отобразить уведомление администратора, если пользователь опускает необходимые поля при сохранении настраиваемого сообщения. Когда они не отображались, я понял, что происходит переадресация, поэтому он переместил код в мой метод init() , когда идея заключалась в том, чтобы проверить, установлен ли скрытый ввод (с указанием сохранения), а затем проверить, следует ли его отображать. После некоторой отладки я оказался в очень запутанной ситуации. Если я просто поставлю строку

add_action('admin_notices', 'image_error');

уведомление администратора отображается как ожидалось, каждый раз. Если я поставлю его в тривиальную инструкцию if:

 if (true) { add_action('admin_notices', 'image_error'); } 

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

 $flag_worked = isset($_POST['post_saved']); if ($flag_worked) { $dumb = 1; add_action('admin_notices', 'image_error'); } 

Переход с помощью отладчика подтверждает, что $flag_worked действительно истинно, блок кода введен, $dumb установлен в один, и выполняется строка add_action . Однако уведомление не отображается, когда это утверждение должно по существу оценивать то же самое, что и эксперимент if (true) . Я явно недопонимаю что-то фундаментальное, может ли кто-нибудь объяснить мою ошибку и как я могу ее исправить? Почему уведомление не отображается, когда удаляется строка для добавления? Я чувствую, что беру сумасшедшие таблетки.

Функция add_action добавляет действие только в очередь, которая будет выполняться при do_action соответствующего do_action . Поэтому, когда вы ставите слишком поздно, ничего не произойдет.

Чтобы точно знать, что происходит в вашем случае, вы должны тщательно изучить порядок выполнения крюка. Это требует понимания вашей полной настройки, включая плагины и т. Д.

Я предполагаю, что к моменту isset($_POST['post_saved']) истинно do_action ('admin_notices') уже выполнено, а в очереди что-то для него бесполезно.

Способ решения проблемы заключается не в том, чтобы добавить действие условно. Всегда добавляйте действие и проверяйте внутри функции. Как это:

 add_action('admin_notices', 'image_error'); function image_error () { $flag_worked = isset($_POST['post_saved']); if ($flag_worked) { echo 'error'; }