我正在寻找一个解决方案,我可以通过元信息更新帖子而不是ID。
我通过jsonp从外部资源获取了我的内容。我将内容保存到数据库中。
我找到的唯一方法是,通过id更新帖子 - 但我没有id。我所拥有的是来自其他资源的文章ID。我将此文章ID保存为每个wp帖子作为元信息。
那么,有什么方法可以通过它的元信息来更新帖子吗?
答案 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的修改日期值?
干杯