Bref, oui la - $wpdb
classe. Voir Codex pour plus d'informations.
Chaque fois que vous interagissez avec une table personnalisée (ou n'importe quelle table, vraiment), vous devez passer par $wpdb
- en particulier assurez-vous que vous êtes familier avec la prepare
méthode qui peut aider à échapper aux requêtes et à empêcher les injections.
Vous devez déjà être familier, car vous devez l'utiliser pour créer la table. Sur votre crochet d'installation, vous devriez avoir quelque chose comme:
$charset_collate = '';
if ( ! empty($wpdb->charset) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
if ( ! empty($wpdb->collate) )
$charset_collate .= " COLLATE $wpdb->collate";
//Create custom table
$sql_custom_table ="CREATE TABLE {$wpdb->prefix}my_table (
id bigint(20) unsigned NOT NULL auto_increment,
column_a varchar(255) default NULL,
column_b varchar(255) default NULL,
PRIMARY KEY (id)
) $charset_collate; ";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql_custom_table);
Ce code est en fait exécuté chaque fois que le plug-in est activé (c'est-à-dire non seulement installé). Il s'exécutera donc lorsque quelqu'un mettra à jour le plug-in automatiquement . Remarque: S'ils mettent à niveau en remplaçant le plug-in manuellement - alors ce ne sera pas le cas - vous devrez donc déclencher le code ci-dessus admin_init
lorsque votre plug-in est mis à niveau (stocker le numéro de version dans le tableau des options, comparer avec la version actuelle) .
Maintenant, vous ne voudriez normalement pas que la CREATE TABLE
commande SQL soit exécutée à chaque fois que vous mettez à jour le plug-in - c'est là dBDelta()
qu'intervient.
Avant d'exécuter la commande ci-dessus - il vérifie si la table existe. De plus, il vérifie les types de colonnes. Donc, si la table n'existe pas, elle la crée, si c'est le cas, mais certains types de colonnes ont changé, elle les met à jour, et si une colonne n'existe pas - elle l'ajoute.
Malheureusement - si vous supprimez une colonne de ce qui précède, cela ne supprime pas automatiquement la colonne. Pour supprimer des colonnes / tableaux, vous devez les spécifiquement DROP
(en vérifiant qu'ils existent avant vous).