According to the Codex, when using wp_insert_post a page is created or updated depending upon the contents of $post_id. If this is zero, a new page is created. Otherwise, the post with the id which is set in $post_id will be updated.
I have a routine which creates a page using wp_insert_post. The routine works. However, if I try to update an already created new page, a second page is created rather than the old one being modified – even though the routine has a mechanism to avoid this:
$list_name = $_REQUEST["list_name"];
// Set (or get) the page id so as to create or update
$page_id = 0;
global $wpdb; // Code is within a function
$sql = $wpdb->prepare( "SELECT ID, post_title FROM wp_mgf_posts WHERE post_title = %s ORDER BY ID DESC LIMIT 1",$list_name);
$results = $wpdb->get_results( $sql,ARRAY_A);
var_dump($results);
foreach($results as $result)
{
$page_id = $result['ID'];
}
echo 'Page id = ' . $page_id;
// Create (or update) the page
$plant_list = array(
'post_ID' => $page_id, // 0 for create, existing page id for update
'post_title' => $list_name, // the title of the list
'post_content' => $content, // page content
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'page',
'post_category' => array(26,30) // development and plant list categories
);
$insert = wp_insert_post( $plant_list );
As you can see, I have put in a var_dump and an echo of the retrieved post_id. This is the result:
array(1) {
[0]=>
array(2) {
[“ID”]=>
string(4) “7001”
[“post_title”]=>
string(18) “Late Summer Colour”
}
}
Page id = 7001
This looks OK to me. Presumably, I’m doing something wrong but have no idea what. Can anyone help?