Вывод информации при обновлении поста (ошибка, предупреждение)
у меня при обновлении поста функция выполняет определенные задачи (проверяет поля, перезаписывает их и тп.). Я использую это таким образом:
function update_post($post_ID) { // бла бла бла (функция ничего не возвращает и не выводит) } add_action( 'save_post', 'update_post', 100, 1 );
прочитав про функцию admin_notices я сделал так:
function update_post($post_ID) { // бла бла бла (функция ничего не возвращает и не выводит, но может заполнить переменную $message) if (!empty($message)) { echo $message; } } add_action( 'save_post', 'update_post', 100, 1 ); add_action( 'admin_notices', 'update_post' );
правильно ли так использовать? не выполняется ли функция два раза?
Нет, не правильно. Выполняется 2 раза, второй раз вхолостую, первый раз может вызвать ошибку...
Там все немного сложнее: при сохранении записи, WP отправляет запрос на файл
post.php
. Там его обрабатывает и затем редиректит обратно на страницу записи. Установка хука теряется при редиректе... Чтобы не терялась, нужно в URL для редиректа добавить свою переменную, потом, если она есть, выводить соответствующее сообщение...Вот код, проверил работает:
дошли руки протестировать этот способ, и не пойму, как в функцию my_admin_notices передать нужный мне текст?
Поправил пример, теперь там это есть...
Можно еще set_transient() get_transient() использовать.
спасибо, однако я так попробовал уже, но потом встал вопрос а как в функцию my_add_notice_query_var передать нужный мне текст?) текст ведь генерируется в главной функции my_save_post
спасибо за намек в сторону transient, пока временно решил проблему примерно также - в функции my_save_post создаю произвольное поле с нужным мне текстом по результатам выполнения скрипта, а в функции my_admin_notices проверяю у поста наличие текста и вывожу на экран этот текст если он есть. затем сразу удаляю это поле, чтобы ошибка не выводилась два раза.