web-dev-qa-db-fra.com

Insérer tous les identifiants de publication dans la nouvelle table de base de données

J'ai un plugin qui crée une nouvelle table de base de données. Lors de l'activation du plug-in, y a-t-il un moyen d'insérer tous mes identifiants de publications dans cette table?

À l’heure actuelle, j’utilise un crochet d’action pour insérer immédiatement l’identifiant des nouvelles publications que je publie.

function transfer_post_id($post_ID)  {
global $wpdb;
   if (!($wpdb->get_row("SELECT post_id FROM $my_table WHERE post_id = $post_ID" ) ) ) { //if post id not already added
      $wpdb->insert( $my_table, array( 'post_id' => $post_ID ) );      
   }
   return $post_ID;
}

add_action ( 'publish_post', 'transfer_post_id' );

Cependant, il y a des publications avant l'activation du plug-in qu'il me faut un moyen d'insérer sans les mettre à jour manuellement.

1
wpStudent

Ainsi:

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;
6
Denis de Bernardy

Vous pouvez concevoir votre table de sorte qu'un ID ne puisse exister qu'une seule fois à l'aide d'une clé. Vous pouvez ensuite exécuter une insertion dans une requête qui sélectionne les valeurs d'identifiant existantes directement avec une sous-sélection.

Comme si ( crédite Denis ):

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;

Consultez le manuel MySql concernant la syntaxe de l'instruction INSERT .

5
hakre

Je suis vraiment désolé! J'ai perdu mon identifiant, pardonne-moi, apparemment, j'ai utilisé un email incorrect. Je contacterai l'administrateur du forum pour savoir comment récupérer mon nom d'utilisateur.

Denis merci pour le code!

Je l'utilise comme si

   $my_table = $wpdb->prefix . "rated_posts";

   $wpdb->query( "INSERT INTO $my_table (rated_post_id)
                SELECT ID
                FROM $wpdb->posts as posts
                LEFT JOIN $my_table as dup_check
                ON dup_check.rated_post_id = posts.ID
                WHERE dup_check.rated_post_id IS NULL" ); 

J'ai désactivé le plugin et lors de l'activation pour tester, je reçois

Le plugin a généré 663 caractères de sortie inattendue lors de l'activation. Si vous remarquez des messages "en-têtes déjà envoyés", des problèmes avec les flux de syndication ou d'autres problèmes, essayez de désactiver ou de supprimer ce plugin.

J'ai wp_debug sur mais je ne reçois aucune erreur détaillée.

0
wpStudent