Чому під час створення нової публікації активується Save_post?


31

Я здивований тим фактом, що моя функція, яку я застосував до save_postдії, натискає посилання "Нова публікація" на інформаційній панелі адміністратора. Примітка - це ще до того, як я натиснув Saveабо Update, і він запуститься негайно, а не після закінчення часу або автоматичного оновлення.

З іншого боку, коли я щось набираю і натискаю кнопки Publishабо Updateабо Save Draft, повідомлення ехо, яке я помістив всередину свого обробника дій, не лунає, тому, здається, що дія НЕ виконується в інший момент. Це може бути не пов’язано.

Ось мій код:

add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
  echo "<h1>YES!</h1>";
}

Це ТАК відгомони (у верхній частині сторінки) , коли я натискаю «New Post» посилання , але не відлуння , коли я що - то типу , а потім натисніть кнопку Updateабо Publishчи Save Draft. Це, здається, суперечить документації про save_postдії та wp_insert_post()функції.

Чи може хтось це очистити за мене?


Дивовижно !!! Я зіштовхуюсь з тією ж ситуацією, коли зберігаєте власні поля метабокса. будь-яка ідея, що я можу використовувати ??
Prasath Nadarajah

Відповіді:


39

Коли ви натискаєте "Нова публікація", ви просто завантажуєте сторінку wp-admin/post-new.php.

Роблячи це, WordPress завжди створюватиме нову публікацію ("Автоматичну чернетку"), щоб забезпечити всі інші функції (наприклад, завантаження медіа) та плагіни працювати нормально, навіть до того, як ви фактично збережете чернетку або опублікуєте публікацію.

А це, в свою чергу, спрацьовує save_post. Звідси ваше відлуння.

Гаразд, то чому б я не отримав відгомону під час оновлення чи публікації?

Між збереженням та завантаженням наступної сторінки, WordPress фактично надсилає GETпереспрямування назад на ту саму сторінку, яка видається прозорою (ви можете це засвідчити за допомогою HTTP-монітора, наприклад HttpFox ).

Іншими словами;

  1. Ви клацаєте UpdateабоPublish
  2. Браузер відправляє дані на сервер
  3. WordPress обробляє це, і в процесі спрацьовує save_post
  4. WordPress відправляє назад заголовок переспрямування та виходить, перш ніж відбуватиметься будь-який вихід браузера (включаючи ехо) *
  5. Веб-переглядач слідкує за перенаправленням і завантажує сторінку "редагувати публікацію".

Переспрямування може здатися непотрібним (оскільки ви можете просто POSTна ту саму сторінку), але це частина методики, яка називається " Повідомлення / перенаправлення / отримання", уникаючи подання дублікатів форми .

Якщо ви намагаєтеся роздрукувати власні повідомлення на основі функції, підключеної save_post, перегляньте ці питання / відповіді .

* Не зовсім вірно, ваше відлуння насправді відбуватиметься до того, як буде надісланий заголовок переспрямування, але браузер його або відкине, або це станеться так швидко, що він ніколи не відображатиметься.


Видатний. Дякую за таку повну та детальну відповідь! В інтересах дізнатися більше, як ви вперше натрапили на ці знання?
Том Ожер

Через ті самі розчарування, які у вас виникли;) Отримайте хороший IDE (я використовую phpDesigner) і просто заглибиться у відповідний файл адміністратора.
TheDeadMedic

1
Прямо на брата. Дякуємо, що ви там зі своїм досвідом!
Том Ожер

Дивовижна інформація. Я пішов на озброєння, тому що на моєму локальному сервері здавалося, що він працює "добре", але не на моєму виробничому сервері ... схоже, на моєму локальному сервері він не застосовував належну техніку "post / redirect / get", оскільки це не було відправлення заголовка переспрямування (не знаю, чому все-таки).
WebMacheter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.