Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

insert post ID with wp_insert_post

how can I choose post ID, when inserting new post, ex:

$post = array(
'ID'                =>  3333,
'comment_status'            =>  'open',
'post_content'      =>  'hi world!',
'post_name'         =>  'title_1',
'post_status'       =>  'publish',
'post_title'        =>  'sdfsfd fdsfds ds',
'post_type'         =>  'post',
);  

$post_id = wp_insert_post($post);

want to insert new post with id = 3333

like image 408
mwafi Avatar asked Jul 02 '11 16:07

mwafi


4 Answers

Thought you might like to know you can use 'import_id' instead of 'ID' and it will "try" and use that.

See the second example here: http://codex.wordpress.org/Function_Reference/wp_insert_post#Example

like image 134
daveaspinall Avatar answered Oct 06 '22 00:10

daveaspinall


Here is my simple solution:

//check if post with id 3333 is already in database, if so, update post 3333
if (get_post_status(3333) ) {
    $post = array(
    'ID'                =>  3333,
    'comment_status'    =>  'open',
    'post_content'      =>  'hi world!',
    'post_name'         =>  'title_1',
    'post_status'       =>  'publish',
    'post_title'        =>  'your title',
    'post_type'         =>  'post',
    );  

    $post_id = wp_insert_post($post);
}
//if not in database, add post with id 3333
else {
    $post = array(
    'import_id'         =>  3333,
    'comment_status'    =>  'open',
    'post_content'      =>  'hi world!',
    'post_name'         =>  'title_1',
    'post_status'       =>  'publish',
    'post_title'        =>  'your title',
    'post_type'         =>  'post',
    );  

    $post_id = wp_insert_post($post);
}

'ID'=> post_id will update that post, while 'import_id'=> post_id will create a new post with that id.

You can also loop through and feed the IDs to run multiple insertions/updates without the risk of creating an infinite amount of new posts.

like image 26
jake Avatar answered Oct 06 '22 00:10

jake


Sorry buddy, not doable. Here is what the devs say at the codex:

IMPORTANT: Setting a value for $post['ID'] WILL NOT create a post with that ID number. Setting this value will cause the function to update the post with that ID number with the other values specified in $post. In short, to insert a new post, $post['ID'] must be blank or not set at all.

http://codex.wordpress.org/Function_Reference/wp_insert_post

like image 39
Banago Avatar answered Oct 06 '22 00:10

Banago


As daveaspinall say. I do a function that do that.

require( 'wp-load.php' );
function simpleImportPost($title,$import_id,$content){
// Create post object
$my_post = array();
$my_post['post_title'] = $title;
$my_post['import_id']=$import_id;
$mypost['comment_status'] = 'closed';//I'll set all closed
$my_post['post_content'] = $content;
$my_post['post_status'] = 'publish';
$my_post['post_author'] = 1;
$my_post['post_category'] = array(0);
// Insert the post into the database
return wp_insert_post( $my_post );
}

example:

simpleImportPost('My Post 35',35,"35 Content");
like image 21
yonilobo Avatar answered Oct 06 '22 00:10

yonilobo