0

I want to publish post from php for automation reasons with dynamic data and cronjob.

I have almost succeeded, you could say that it works, but in an incorrect way.

If the title doesn't exist, create it.

If the title exists, it updates it, but with a small error.

It is published again with the same data, instead of updating it. This makes the new post sharing plugins share the post every time it is updated and I want to avoid this

<?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;
?>
0

Try to use wp_update_post() in place of wp_insert_post for update.

$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 );
}
  • Thank you very much! Now it works perfect and I can continue with my project :) – JonatanPN Nov 16 '20 at 0:47
  • you're welcome. Don't forget to set the answer as good ( click the green V ) – Gregory Nov 16 '20 at 8:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.