¿Por qué se desencadena la acción save_post al crear una nueva publicación?

30

Me sorprende el hecho de que mi función que he añadido a la acción save_post se activa cuando hago clic en el enlace "Nueva publicación" en el Panel de administración. Nota: esto es antes de que haya presionado Guardar o Actualizar , y se dispara de inmediato, no después de un tiempo transcurrido o de una actualización automática.

Por otro lado, cuando escribo algo y presiono los botones Publicar o Actualizar o Guardar borrador , la declaración de eco I que he puesto dentro de mi controlador de acción no emite eco, por lo que parece que la acción NO se está disparando en ningún otro momento. Esto puede no estar relacionado.

Aquí está mi código:

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

Este SÍ hace eco (en la parte superior de la página) cuando presiono el enlace "Nueva publicación", pero NO hace eco cuando escribo algo y luego presiono Actualizar o Publicar o Guardar borrador . Esto parece contradecir la documentación sobre la acción save_post y la función wp_insert_post() .

¿Puede alguien aclararme esto?

    
pregunta Tom Auger 08.06.2011 - 20:31

1 respuesta

37

Cuando haces clic en "Nueva publicación", simplemente estás cargando la página wp-admin/post-new.php .

Al hacerlo, WordPress siempre creará una nueva publicación (un 'Borrador automático') para garantizar que todas las demás funciones (como las cargas de medios) y los complementos funcionen normalmente, incluso antes de que usted realmente guarde Un borrador o publicar la publicación.

Y esto, a su vez, activa save_post . De ahí tu eco.

  

De acuerdo, ¿por qué no obtengo un eco al actualizar o publicar?

Entre el guardado y la carga de la siguiente página, WordPress envía en realidad un redireccionamiento GET a la misma página, que aparece transparente (puede presenciar esto con un monitor HTTP, como HttpFox ).

En otras palabras;

  1. Haz clic en Update o Publish
  2. El navegador envía datos al servidor
  3. WordPress lo maneja, y en el proceso activa save_post
  4. WordPress envía un encabezado de redireccionamiento y sale antes de que se produzca la salida del navegador (incluido su eco) *
  5. El navegador sigue la redirección y carga la página de 'editar publicación'.

El redireccionamiento puede parecer innecesario (ya que podría simplemente POST a la misma página), pero es parte de una técnica conocida como Publicar / Redirigir / Obtener para evitar duplicar las presentaciones de formularios .

Si está intentando imprimir mensajes personalizados basados en el resultado de una función conectada a save_post , consulte estas preguntas / respuestas .

* No es estrictamente cierto, su eco se producirá de hecho antes de que se envíe el encabezado de redirección, pero el navegador lo descartará o las cosas sucederán tan rápido que nunca se procesarán.

    
respondido por el TheDeadMedic 08.06.2011 - 20:58

Lea otras preguntas en las etiquetas