Я удивлен тем фактом, что моя функция, которую я прикрепил к save_post
действию, срабатывает, когда я нажимаю ссылку «Новая публикация» на панели администратора. Примечание. Это происходит до того, как я нажал Saveили Update, и срабатывает немедленно, а не после истечения времени или автоматического обновления.
С другой стороны, когда я затем что-то набираю и нажимаю кнопки Publishили Updateили Save Draft, оператор echo, который я поместил в свой обработчик действий, не выводит эхо, поэтому кажется, что действие НЕ запускается в любое другое время. Это может быть не связано.
Вот мой код:
add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
echo "<h1>YES!</h1>";
}
Это ДА эхом (вверху страницы), когда я нажимаю ссылку «Новая запись», но НЕ эхом, когда я что-то печатаю, а затем нажимаю Updateили Publishили Save Draft. Это кажется противоречащим документации по save_post
действию и wp_insert_post()
функции.
Кто-нибудь может прояснить это для меня?
Ответы:
Когда вы нажимаете «Новое сообщение», вы просто загружаете страницу
wp-admin/post-new.php
.При этом WordPress всегда будет создавать новый пост («Черновик авто»), чтобы все остальные функции (такие как загрузка медиафайлов) и плагины работали как обычно, даже до того, как вы фактически сохраните черновик или опубликуете публикацию.
И это, в свою очередь, вызывает
save_post
. Отсюда ваше эхо.Между сохранением и последующей загрузкой страницы WordPress фактически отправляет
GET
перенаправление обратно на ту же страницу, которая выглядит прозрачной (вы можете убедиться в этом с помощью монитора HTTP, такого как HttpFox ).Другими словами;
Update
илиPublish
save_post
Перенаправление может показаться ненужным (поскольку вы можете просто
POST
перейти на одну и ту же страницу), но это часть техники, известной как Post / Redirect / Get, во избежание дублирования отправки форм .Если вы пытаетесь распечатать пользовательские сообщения, основанные на результате функции, к которой они подключены
save_post
, ознакомьтесь с этими вопросами / ответами .* Не совсем верно, ваше эхо на самом деле произойдет до того, как заголовок перенаправления будет отправлен, но браузер либо откажется от него, либо произойдет так быстро, что он никогда не отобразится.
источник