Insérez tous les ID poste dans la base de données nouvelle table
-
16-10-2019 - |
Question
J'ai un plug-in qui crée une nouvelle table de base de données. Lors de l'activation du plug-in est-il un moyen d'insérer tous mes messages ids dans ce tableau?
En ce moment je suis à l'aide d'un crochet d'action pour insérer immédiatement l'identifiant de nouveaux postes 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 postes avant d'activer le plugin que je besoin d'un moyen d'insérer sans mettre à jour manuellement chacun.
La solution
comme ceci:
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;
Autres conseils
Vous pouvez concevoir votre table façon telle qu'un ID ne peut existe une fois à l'aide d'une clé. Vous pouvez ensuite exécuter une insertion dans la requête qui sélectionne les valeurs existantes d'identité directement avec une sous-sélection.
Comme si ( 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 de MySql sur la syntaxe du instruction INSERT .
Je suis désolé! J'ai perdu connexion s'il vous plaît pardonnez-moi, apparemment je un email incorrect. Je vais contacter l'administrateur du forum pour voir comment je peux 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" );
Je désactive le plug-in et lors de l'activation de test, je reçois
Le plugin a généré 663 caractères sortie inattendue lors de l'activation. Si vous remarquez « déjà envoyé des en-têtes » messages, problèmes de syndication aliments ou toute autre question, désactiver ou de supprimer ce plug-in.
Je wp_debug sur mais je ne reçois pas des erreurs détaillées.