使用wp_insert_post插入帖子ID

时间:2011-07-02 16:40:33

标签: wordpress plugins codex

如何在插入新帖子时选择帖子ID,例如:

$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);

想要插入ID = 3333的新帖子

5 个答案:

答案 0 :(得分:16)

您可能想知道自己可以使用'import_id'代替'ID'而且会“尝试”并使用它。

请参阅此处的第二个示例:http://codex.wordpress.org/Function_Reference/wp_insert_post#Example

答案 1 :(得分:5)

抱歉伙计,不可行。以下是开发者在代码中所说的内容:

  

重要:为$ post ['ID']设置值不会创建具有该ID号的帖子。设置此值将导致该函数使用该ID号更新帖子,并使用$ post中指定的其他值。简而言之,要插入新帖子,$ post ['ID']必须为空或根本不设置。

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

答案 2 :(得分:3)

这是我的简单解决方案:

//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'        =>  'sdfsfd fdsfds ds',
    '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'        =>  'sdfsfd fdsfds ds',
    'post_type'         =>  'post',
    );  

    $post_id = wp_insert_post($post);
}

'ID'=> post_id将更新该帖子,而'import_id'=> post_id将创建一个具有该ID的新帖子。

您还可以循环并提供ID以运行多次插入/更新,而无需创建无限量的新帖子。

答案 3 :(得分:0)

可以这样做,而不是使用API​​的插入功能。您可以编写自己的INSERT查询。您总是希望尽可能使用API​​,但有时候这是不可能的。查询将如下所示:

global $wpdb;
$wpdb->query( $wpdb->prepare("
    INSERT INTO {$wpdb->posts}
    VALUES( %d, %d, NOW(), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), %s, %s, %d, %s, %d, %s, %s, %d )",
    $ID,
    $post_author,
    $post_date_gmt,
    $post_content,
    $post_title,
    $post_excerpt,
    $post_status,
    $comment_status,
    $ping_status,
    $post_password,
    $post_name,
    $to_ping,
    $pinged,
    $post_modified_gmt,
    $post_content_filtered,
    $post_parent,
    $guid,
    $menu_order,
    $post_type,
    $post_mime_type,
    $comment_count
) );

您必须首先确保数据库中尚不存在该ID。如果将来发布表架构更改,您可能需要更新查询以考虑更改。

答案 4 :(得分:0)

正如daveaspinall所说。 我做了一个这样做的功能。

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 );
}

示例:

simpleImportPost('My Post 35',35,"35 Content");