Update post if exist from PHP

时间:2020-11-15 作者:JonatanPN

出于自动化原因,我想用动态数据和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;
?>

1 个回复
最合适的回答,由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 );
}

相关推荐

在网页中通过快捷码获取MySQL数据并显示结果的问题

我正在学习开发一个自定义插件,目前它的目的是从wp数据库读取数据并显示数据。我相信我最初的SQL语句是正确的,因为它获取了我想要显示的数据。然而,每当执行该函数时(从页面加载时的短代码),我都会得到错误,而不是显示提取的数据Trying to get property \'num_rows\' of non-object in C:\\wamp64\\www\\testsite1\\wp-content\\plugins\\WickCustomLD\\WickCustomLD.php on line 84