Usando el enlace 'draft_to_publish' (transición de estado posterior)

2

Estoy tratando de usar el gancho draft_to_publish ( enlace ) para ejecutar una función cuando se publique una publicación que es un borrador. Este gancho no parece estar funcionando:

add_action('draft_to_publish', 'myFunction');

Cuando uso esto en mi complemento, myFunction nunca se activa. He usado / probado la función antes. Sé que es el gancho, no el contenido de mi Función.

Todas las 'soluciones' que encontré solo enlazan a la página del Codex arriba. ¿Alguna idea sobre por qué este gancho no funciona?

Editar: Aquí hay un ejemplo. Si el correo electrónico no se enviará, porque la acción nunca se dispara:

function myfunction () {
        $to = "[email protected]";
        $subject = "Hi!";
        $body = "Hi,\n\nHow are you?";
        if (mail($to, $subject, $body)) {
          echo("<p>Message successfully sent!</p>");
         } else {
          echo("<p>Message delivery failed...</p>");
         }
    }
add_action('draft_to_publish', 'myFunction');
    
pregunta AndrewJM 28.12.2012 - 16:12

1 respuesta

9

Ciertamente tiene el enlace correcto, pero tenga en cuenta que está conectando su funcionalidad específicamente a la acción draft_to_publish , es decir, al caso específico de un post-objeto preexistente en la base de datos con el estado draft . actualizado a publish . Tenga en cuenta que esta acción ignora los borradores que Wordpress guarda automáticamente cuando se crea una nueva publicación: estos "borradores" tienen un post_status de auto-draft .

No estoy exactamente seguro de cómo ha estado depurando el problema hasta este punto, pero si aún no lo ha hecho, recomendaría verificar que la acción en sí está activándose cuando espera que lo haga, tal vez adjuntando algunos Función simple, arbitraria y obvia:

function kill_wp( $post ) {
  die( 'draft_to_publish fired for post #' . $post['ID'] . ' entitled, "' . $post['post_title'] . '"' );
}
add_action( 'draft_to_publish', 'kill_wp' );

Dicho esto, parte de su problema puede estar en el uso de mayúsculas: la devolución de llamada de la acción en su ejemplo hace referencia a la función myFunction , mientras que la función que se ha definido se llama myfunction .

Aunque no estoy seguro de lo que está intentando lograr, puede intentar alternativamente adjuntar su funcionalidad a la acción genérica transition_post_status que pasa el estado nuevo de la publicación, el estado anterior de la publicación y el objeto de la publicación de tal manera que usted tendría algo similar a

function wpse77561_mail_on_publish( $new_status, $old_status, $post ) {
  if (get_post_type($post) !== 'post')
        return;    //Don't touch anything that's not a post (i.e. ignore links and attachments and whatnot )

    //If some variety of a draft is being published, dispatch an email
    if( ( 'draft' === $old_status || 'auto-draft' === $old_status ) && $new_status === 'publish' ) {
        $to      = '[email protected]';
        $subject = 'Hi!';
        $body    = 'Hi,' . chr(10) . chr(10) . 'How are you?';

        if( wp_mail( $to, $subject, $body ) ) {
            echo('<p>Message successfully sent!</p>');
        } else {
            echo('<p>Message delivery failed...</p>');
        }
    }
}
add_action('transition_post_status', 'wpse77561_mail_on_publish');

También hay una serie de herramientas disponibles que podrían brindarte más información sobre la ejecución de acciones de Wordpress, como action hooks inspector para el Barra de depuración .

    
respondido por el bosco 28.12.2012 - 22:31

Lea otras preguntas en las etiquetas