2016-03-17 76 views
0

我正在尋找一個解決方案,在那裏我可以通過元信息更新帖子,而不是通過id。WordPress的 - 更新發布元信息

我通過jsonp從外部資源獲取了我的內容。我將內容保存到數據庫中。

我發現的唯一方法是,通過id更新帖子 - 但我沒有ID。我擁有的是來自其他資源的文章ID。我將這篇文章ID保存爲每個wp文章的元信息。

那麼,有沒有什麼辦法,通過它的元信息更新帖子?

+0

歡迎來到SO。請閱讀[如何提問](http://stackoverflow.com/help/how-to-ask)併發布相關代碼,以便人們可以幫助您。 –

回答

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中得到了兩個不同的值。

例如

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

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

那麼,有沒有人有更好的解決方案或想法?有沒有人知道,爲什麼它不保存從我的JSON修改日期值?

乾杯