save-post – Verifique la actualización frente a la nueva publicación en la acción save_post

Pregunta:

¿Es posible dentro de la acción save_post determinar si se está creando una nueva publicación o si se está actualizando una publicación existente?

Respuesta:

Desde la versión 3.7 de WordPress. – IIRC – el gancho save_post – más información sobre el gancho y su uso en Code Reference: save_post y Codex: save_post – tiene un tercer parámetro $update que puede usarse para determinar exactamente eso.

@param int $ post_ID ID de publicación.
@param WP_Post $ post Objeto de publicación.
@param bool $ update Si se trata de una publicación existente que se está actualizando o no.


Nota:

$update no siempre es true ; puede verlo y probarlo usted mismo con el siguiente código. Sin embargo, no está bien documentado, posiblemente lejos de tener un nombre óptimo y, por lo tanto, crea expectativas engañosas. El siguiente código se puede usar para depurar, juegue con cuándo interceptar la ejecución del código, porque de lo contrario no verá la información / mensajes. Creo que el culpable del comportamiento engañoso es el manejo de revisiones y guardados automáticos, que podrían deshabilitarse, pero no lo recomiendo y no lo he probado. No estoy seguro de si esto justifica un boleto de Trac , así que no abrí uno, si lo cree, siga el enlace y hágalo usted mismo. Aparte de eso, como se indica en los comentarios, si tiene un problema específico, publique una nueva pregunta.

add_action( 'save_post', 'debug_save_post_update', 10, 3 );
function debug_save_post_update( $ID, $post, $update ) {

  echo '<pre>';
  print_r( $post ); echo '<br>';
  echo '$update == ';
  echo $update ? 'true' : 'false';

  //conditions
  if( ! $update && $post->post_status == "auto-draft" ) {
    // applies to new post
    echo ' && $post->post_status == "auto-draft"';
    //die();
  } else if ( ! $update ) {
    // applies basically to the (auto saved) revision 
    //die();
  } else {
    // applies to updating a published post
    // when there is a revision, which is normally the case, 
    // standard behavior of WordPress, then it is considered 
    // an update, which is where the confusion sets in
    // there are other methods, like checking time or post status
    // depending on your use case it might be more appropriate 
    // to use one of those alternatives 
    //die();
  }

  echo '</pre>';
  //die();
}

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım