出于自动化原因,我想用动态数据和cronjob从php发布文章。
我几乎成功了,你可以说这很有效,但方式不正确。
如果标题不存在,请创建它。
如果标题存在,它会更新它,但有一个小错误。
它将使用相同的数据再次发布,而不是更新。这使得新的帖子共享插件在每次更新时都会共享帖子,我想避免这种情况
<?php
// require wp-load.php to use built-in WordPress functions
require_once("/var/www/mysite.com/wp-load.php");
//Title
$TítleProduct = ("Title Product 1");
//Desc
$Desc = ("Product descripction 1");
// Register Post Data
$post = array();
$post[\'post_status\'] = \'publish\';
$post[\'post_type\'] = \'post\'; // can be a CPT too
$post[\'post_title\'] = "$TítleProduct";
$post[\'post_content\'] = ($Desc);
$post[\'post_author\'] = 1;
function wp_exist_post_by_title($title)
{
global $wpdb;
$return_id = $wpdb->get_row("SELECT ID FROM wp_posts WHERE post_title = \'" . $title . "\' && post_status = \'publish\' && post_type = \'post\' ", \'ARRAY_N\');
if (empty($return_id)) {
return false;
} else {
return $return_id;
}
}
$id = wp_exist_post_by_title($post[\'post_title\']);
if($id !== false)
{
$post[\'ID\'] = $id["0"];
}
// Create Post
$post_id = wp_insert_post( $post );
/*******************************************************
** SIMPLE ERROR CHECKING
*******************************************************/
$finaltext = \'\';
if($post_id){
$finaltext .= \'Se ha creado/actualizado correctamente el post \'.$post[\'ID\'].\'.<br>\';
} else{
$finaltext .= \'Something went wrong and I didn\\\'t insert a new post.<br>\';
}
echo $finaltext;
?>
最合适的回答,由SO网友:Gregory 整理而成
尝试使用wp_update_post()
代替wp_insert_post
用于更新。
$id = wp_exist_post_by_title($post[\'post_title\']);
if($id !== false)
{
$post[\'ID\'] = $id["0"];
// Create Post
$post_id = wp_update_post( $post );
} else {
$post_id = wp_insert_post( $post );
}