2011-07-02 2 views
4

comment puis-je choisir ID après, lors de l'insertion nouveau poste, ex:insert ID de poste avec wp_insert_post

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

veulent insérer un nouveau message avec id = 3333

+0

'id' est un champ primaire d'incrémentation automatique dans la base de données. Je ne pense pas que tu puisses faire ça. Pourquoi voulez-vous exactement cela? – Dogbert

+0

J'ai aussi une situation où cela est nécessaire. Je migre des milliers de messages personnalisés d'un autre site, chacun avec une taxonomie et des métadonnées. En définissant l'ID poste sur le même que l'ancien site, il est beaucoup plus facile d'importer le reste des données. J'ai été capable d'utiliser 'import_id' avec succès, comme suggéré par @daveaspinall ci-dessous – Astrotim

Répondre

4

ami Désolé, pas faisables. Voici ce que les développeurs disent au codex:

IMPORTANT: Définition d'une valeur pour $ post [ 'id'] NE créer un poste avec ce numéro d'identification. Si vous définissez cette valeur, la fonction met à jour le poste avec ce numéro d'identification avec les autres valeurs spécifiées dans $ post. En résumé, pour insérer un nouveau message, $ post ['ID'] doit être vide ou ne pas être défini du tout.

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

+0

Ce n'est pas réellement la bonne réponse (malgré être accepté). Voir cette réponse à la place http://stackoverflow.com/a/8153962/192705 – Ben

0

Il est possible de le faire, mais pas avec la fonction d'insertion de l'API. Vous pouvez écrire votre propre requête INSERT à la place. Vous voulez toujours utiliser l'API quand vous le pouvez, mais parfois ce n'est pas possible. La requête devrait ressembler à ceci:

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

Vous devrez d'abord vous assurer que l'ID n'existe pas déjà dans la base de données. Si le schéma de table post change à l'avenir, vous devrez peut-être mettre à jour la requête pour prendre en compte les modifications.

0

Comme disent daveaspinall. Je fais une fonction qui fait cela.

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

exemple:

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

Voici ma solution simple:

//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 mettra à jour ce poste, alors que 'IMPORT_ID' => post_id va créer un nouveau message avec cet ID.

Vous pouvez également parcourir et alimenter les ID pour exécuter plusieurs insertions/mises à jour sans risquer de créer une quantité infinie de nouveaux messages.