如何在帖子发布时更新帖子内容?

时间:2017-06-08 作者:user121348

我正在制作一个插件,需要在发布预定帖子之前更改帖子内容。

帖子首先按计划存储,然后当它将其状态从计划(未来)更改为发布(发布)时,我需要向API发送请求,从中获取响应,并在帖子内容中插入API响应。

问题是,我希望响应的状态转换为“wait”,在将API响应插入到帖子内容之前,不要将帖子显示为已发布。

非常感谢。

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

以下是您可以做的:

当帖子的状态从futurepublish, 当预定时间到达时就会发生。然后,将其状态更改为draft,并向API发出请求。如果API回复了,您可以存储回复的内容并发布帖子。如果没有,请再次安排。

function api_request_transition( $new_status, $old_status, $post ) {
    // Let\'s check for draft too, since we will set the status to draft if the API doesn\'t reply
    if ( ($old_status ==\'future\' || $old_status ==\'draft\') && $new_status ==\'publish\' ) {
        // Set the status to draft for now
        $current_post = array(
          \'ID\'           => $post->ID,
          \'post_title\'   => $post->post_title,
          \'post_status\'  => \'draft\',
        );
        wp_update_post( $current_post );
        // Get the content from the API
        $api_data = file_get_contents(\'URL HERE\');
        // If the content is valid, add it to the post and publish it
        if ($api_data) {
            $my_post = array(
              \'ID\'           => $post->ID,
              \'post_title\'   => $post->post_title,
              \'post_content\' => $api_data,
              \'post_status\'  => \'publish\',
            );
            wp_update_post( $my_post );
         // If the API didn\'t answer, run this process again in 5 minutes
        } else {
            // Pass the data to the cron job
            $args = ( 
                    $new_status, 
                    $old_status, 
                    $post ,
                );
            // Schedule this again for 5 minutes later
            wp_schedule_single_event(time() + 300 , \'api_repeat_request\', $args);
        }
    }
}
add_action( \'transition_post_status\', \'api_request_transition\', 10, 3 );
add_action( \'api_repeat_request\', \'api_request_transition\',1 ,3 );

结束

相关推荐

Plugins_url()错误地返回wp-Include目录

我怀疑它有问题plugins_url() 但我看到的是一些奇怪的行为。我在激活的插件中有以下内容function include_masonry() { wp_enqueue_script( \'masonry\', plugins_url(\'js/masonry.min.js\', __FILE__), array(), \'3.2.1\', true ); wp_enqueue_script( \'my_init_script\', plugins_url(\'js/my_i