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