如何在后台运行wp_sert_post()&wpdb?

时间:2022-01-31 作者:Amenadiel

我创建了一个代码,从远程API获取数据,然后回显某些数据&;将这些数据导入post type 使用wp_insert_post() &;post meta**使用wpdb->query().

这是我当前的代码:

$imdbid = $_GET[\'id\'];
$string = file_get_contents("http://www.omdbapi.com/?i=".$imdbid."&apikey=API_KEY_HEREKEYVALUE");
$json = json_decode($string, true);

if( $json[\'Response\'] === "True" ){    

    //METADATA
    $dataID = $json[\'imdbID\'];
    $dataTitle = $json[\'Title\'];
    $dataYear = $json[\'Year\'];

    $dbdata = array(
        \'post_title\'    => $dataID,
        \'post_status\'   => \'publish\',
        \'post_type\' => \'datadb\', 
        \'post_author\'   => 1
                );
          
        
    if( $dbid = wp_insert_post( $dbdata ) ){

        //METADATA PRINT
        echo $dataID;
        echo $dataTitle;
        echo $dataYear;



        $statement = "INSERT INTO wp_postmeta
        (post_id, meta_key, meta_value)
        VALUES
        (\'".$dbID."\', \'ztdb_imdb_id\', \'%s\'), 
        (\'".$dbID."\', \'ztdb_title\', \'%s\'),
        (\'".$dbID."\', \'ztdb_year\', \'%s\');";
      
        $sql = $wpdb->prepare($statement, $dataID, $dataTitle, $dataYear);
        $wpdb->query($sql); 

    }
          
}
现在,如果我只使用这些代码,页面将不会停止加载,直到wp_insert_post()wpdb 已完成。是否有任何方法可以在后台运行这两个程序,以便在访问页面和$dataID, $dataTitle, and $dataYear 是否立即回声/显示?

1 个回复
SO网友:kero

页面加载不受影响[…]是否立即回显/显示//元数据?

使用当前设置,这是不可能的。为了立即显示,您需要数据。要获取数据,您需要等待。

可能的解决方案包括:

获取之前的数据(例如通过Cron),并用信息填充数据库-&燃气轮机;不需要现场取,但你可能不知道id要得到什么,不要得到什么。

异步获取数据(例如,通过调用模板中的REST端点)-&燃气轮机;页面加载速度很快,但缺少部分并在稍后呈现。但无需预取数据。

相关推荐

如果我尝试取消调度未调度的WP Cron调度任务,是否会出现错误?

所以,我正在开发一个插件,我想知道我是否调用$timestamp = wp_next_scheduled( \'scheduled_hook\' ); wp_unschedule_event( $timestamp, \'scheduled_hook\' ); 如果根本不检查它是否在计划中,它会给我一个错误,还是只是检查它并取消它的计划,以防它实际上已经计划好了,否则就忽略它?