Wordpress - 按元信息更新帖子

时间:2016-03-17 07:58:36

标签: php database wordpress post

我正在寻找一个解决方案,我可以通过元信息更新帖子而不是ID。

我通过jsonp从外部资源获取了我的内容。我将内容保存到数据库中。

我找到的唯一方法是,通过id更新帖子 - 但我没有id。我所拥有的是来自其他资源的文章ID。我将此文章ID保存为每个wp帖子作为元信息。

那么,有什么方法可以通过它的元信息来更新帖子吗?

1 个答案:

答案 0 :(得分:0)

确定, 这里有一些代码和我现在所做的:

public function saveArticleInWpDatabase($json_data){
    for ($i = 0; $i < count($json_data); $i++) {

        $articleId = $json_data[$i]['articleId'];
        $img = $json_data[$i]['img'];

        $articleHeadline = $json_data[$i]['articleContent']['headline'];
        $articleContent = $json_data[$i]['articleContent']['content'];

        $termsInput = $json_data[$i]['articleContent']['terms'];
        $terms = explode(',',$termsInput);
        $creationDate = $json_data[$i]['articleCreationDate'];
        $modifiedDate = $json_data[$i]['articleModifiedDate'];

    //Check if post with article ID in postmeta exists
        $existingId = $this->wpdb->get_var("SELECT post_id FROM ".$this->wpdb->postmeta." WHERE (meta_key = 'article_id' AND meta_value = '".$articleId."')");

        //Posts doesn't exist
        if ($existingId == null) {

            $my_post = array(
                'post_date' => $creationDate,
                'post_modified' => $modifiedDate,
                'post_title' => $articleHeadline,
                'post_content' => $articleContent,
                'post_status' => 'publish',
                'post_author' => 1,
                'post_category' => array(0, $categoryId)
            );

            $last_id = wp_insert_post($my_post);

            add_post_meta($last_id, 'article_id', $articleId, true);
            wp_set_post_categories($last_id, array(0,$categoryId), true);
            wp_set_post_terms( $last_id,$terms, 'post_tag', true );

            //$this->_import_photo($last_id, $img);
        }
        //Post exists
        else{
            $my_post = array(
                'ID' => $existingId,
                'post_date' => $creationDate,
                'post_modified' => $modifiedDate,
                'post_title' => $articleHeadline,
                'post_content' => $articleContent,
                'post_status' => 'publish',
                'post_author' => 1,
                'post_category' => array(0, $categoryId)
            );

            //Get last modified date and compare it with the new one
            $lastUpdate = $this->wpdb->get_var("SELECT post_modified FROM " . $this->wpdb->posts . " WHERE ID = ".$existingId);

            if(strcmp($lastUpdate, $modifiedDate) != 0){
                var_dump("Update article with id: " . $existingId);
                $last_id = wp_update_post($my_post);
            }
            else{
                var_dump("Article: " . $existingId . " Nothing changed");
            }

        }
    }
}

如您所见,如果文章不存在,我会保存其他CMS中的唯一商品编号。

如果文章中包含meta_key:article_id和当前值,我会检查修改日期是否相同。如果没有,我会更新帖子。

我每分钟通过unix cron作业调用此函数。但我认为,这不是最佳方式(性能)(数据库请求太多?)。

另一个想法是,post_modified值总是与post_date相同,但我的json中有两个不同的值。

e.g。

"articleCreationDate": "2012-05-21 14:38:29", "articleModifiedDate": "2016-02-11 14:52:01"

但它只在两列中保存了articleCreationDate(post_date,post_modified)。

那么,有没有人有更好的解决方案或想法?有谁知道,为什么它不保存我的json的修改日期值?

干杯