Как запланировать и опубликовать публикацию после того, как она будет готова?
У меня есть веб-сайт, содержимое которого динамически генерируется ПОСЛЕ публикации сообщения.
Я использую этот код для создания нужного мне контента:
add_action( 'publish_post', 'generate_content');
function generate_content($post){
//some code here
}
Этот процесс иногда может занять до 5 минут, в то время как сообщение публикуется мгновенно (я уже установил тайм-аут php на 600 секунд).
Я хочу запланировать публикацию на то время, когда функция выполнит свою задачу, или сохранить публикацию как черновик и автоматически опубликовать ее когда все будет готово.
Есть ли способ достичь этого? Любая помощь будет оценена по достоинству.
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
}
Использовать wp_publish_post( $post_id)
чтобы изменить статус сообщения. И подумайте о другом крючке, таком как 'save_post'
вместо того, чтобы 'publish_post'
чтобы начать процесс.
Это позволит вам запускать код после создания публикации и должно выполняться мгновенно. Поэтому, если новый статус публикации - публикация, и до этого был любой другой статус, например черновик или нет, это будет запущено.
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 );