Как запланировать и опубликовать публикацию после того, как она будет готова?


У меня есть веб-сайт, содержимое которого динамически генерируется ПОСЛЕ публикации сообщения.

Я использую этот код для создания нужного мне контента:

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

Этот процесс иногда может занять до 5 минут, в то время как сообщение публикуется мгновенно (я уже установил тайм-аут php на 600 секунд).

Я хочу запланировать публикацию на то время, когда функция выполнит свою задачу, или сохранить публикацию как черновик и автоматически опубликовать ее когда все будет готово.

Есть ли способ достичь этого? Любая помощь будет оценена по достоинству.

 1
Author: Jack Johansson, 2016-11-19

3 answers

Может быть два способа:

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' );
}

Или сделайте публикацию в будущем статусе и установите время публикации через 10 или 20 минут. Затем используйте следующий код:

add_action( 'future_post', 'wpse_246730_my_function' );
function wpse_246730_my_function( $post_id, $post )
{
    // Do your things
}
 1
Author: Ashok Kumar Nath, 2016-11-19 22:47:35

Использовать wp_publish_post( $post_id) чтобы изменить статус сообщения. И подумайте о другом крючке, таком как 'save_post' вместо того, чтобы 'publish_post' чтобы начать процесс.

 0
Author: jgraup, 2016-11-19 17:11:40

Это позволит вам запускать код после создания публикации и должно выполняться мгновенно. Поэтому, если новый статус публикации - публикация, и до этого был любой другой статус, например черновик или нет, это будет запущено.

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
Author: Sam Miller, 2016-11-20 12:28:45