вставить идентификатор сообщения с помощью wp_insert_post - PullRequest
5 голосов
/ 02 июля 2011

как я могу выбрать идентификатор сообщения при вставке нового сообщения, например:

$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 ]

16 голосов
/ 16 ноября 2011

Думаю, вы хотели бы знать, что вы можете использовать 'import_id' вместо 'ID', и он "попытается" и использовать это.

См. Второй пример здесь: http://codex.wordpress.org/Function_Reference/wp_insert_post#Example

5 голосов
/ 02 июля 2011

Извините, приятель, не выполнимо. Вот что говорят разработчики в кодексе:

ВАЖНО : установка значения для $ post ['ID'] НЕ БУДЕТ создавать сообщение с таким идентификатором. Установка этого значения приведет к тому, что функция обновит сообщение с этим идентификатором с другими значениями, указанными в $ post. Короче говоря, чтобы вставить новое сообщение, $ post ['ID'] должно быть пустым или не задано вообще.

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

3 голосов
/ 16 марта 2016

Вот мое простое решение:

//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 создаст новую запись с этим идентификатором.

Вы также можете просматривать и передавать идентификаторы для запуска нескольких вставок / обновлений без риска создания бесконечного количества новых сообщений.

0 голосов
/ 03 июня 2013

Как сказал Дэйваспин. Я делаю функцию, которая делает это.

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");
0 голосов
/ 13 октября 2011

Это можно сделать, но не с помощью функции вставки 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
) );

Сначала вам нужно убедиться, что идентификатор еще не существует в базе данных.Если в будущем схема таблиц изменений изменится, возможно, потребуется обновить запрос, чтобы учесть эти изменения.

...