web-dev-qa-db-fra.com

Comment planifier et publier un message après qu'il soit prêt?

J'ai un site Web dont le contenu de la publication est généré dynamiquement APRÈS la publication d'une publication.

J'utilise ce code pour générer le contenu que je veux:

add_action( 'publish_post', 'generate_content'); function generate_content($post){ //some code here }

Ce processus peut parfois prendre jusqu'à 5 minutes, alors que le message est publié instantanément (j'ai déjà défini le délai d'attente php à 600 secondes).

Je souhaite planifier la publication de la tâche lorsque la fonction est terminée ou la sauvegarder en tant que brouillon et la publier automatiquement lorsqu'elle est prête.

Y a-t-il un moyen d'y parvenir? Toute aide est appréciée.

1
Jack Johansson

Il pourrait y avoir deux façons:

add_action( 'draft_post', 'wpse_246730_my_function' );
function wpse_246730_my_function( $post_id, $post )
{
    // Do your things

    // Just to stay safe
    remove_action( 'draft_post', 'wpse_246730_my_function' );
    wp_publish_post( $post_id );
    add_action( 'draft_post', 'wpse_246730_my_function' );
}

Vous pouvez également définir le statut futur de la publication et définir un délai de publication après 10 ou 20 minutes. Ensuite, utilisez le code suivant:

add_action( 'future_post', 'wpse_246730_my_function' );
function wpse_246730_my_function( $post_id, $post )
{
    // Do your things
}
1
Ashok Kumar Nath

Cela vous permettra d'exécuter du code une fois qu'une publication a été créée et devrait s'exécuter instantanément. Donc, si le nouveau statut de la publication est publié et que tout autre statut était antérieurement comme brouillon ou sans statut, cela s'exécutera.

function some_function( $new, $old, $post ) {
    if ( ( $new == 'publish' ) && ( $old != 'publish' ) && ( $post->post_type == 'post' ) ) {
        //Run code here

    } else {
        return;
    }
}
add_action( 'transition_post_status', 'some_function', 10, 3 );
0
Sam Miller

Utilisez wp_publish_post( $post_id) pour modifier le statut de la publication. Et considérez un autre crochet comme 'save_post' au lieu de 'publish_post' pour lancer le processus.

0
jgraup