La bonne façon de le faire ces jours-ci est d'inclure votre schéma en tant que fichier dans la source du plugin et d'utiliser la fonction WordPress intégrée dbDelta () pour mettre à jour la base de données selon les besoins en utilisant ce schéma. Le code réel requis est très simple:
$sql = file_get_contents( plugin_dir_path(__FILE__) . "/schema.sql" );
dbDelta( $sql );
Cela créera et mettra à jour la base de données pour vous selon les besoins. Lors de ma dernière vérification, il n'a pas supprimé les anciennes colonnes inutilisées, vous devez donc coder pour cela via une vérification de version. C'est une belle fonctionnalité de WordPress et un énorme gain de temps. Attention lors de la création du fichier schema.sql que vous copiez l'espacement dans une exportation de schéma mysql exactement comme le code dbDelta () est réputé être très pointilleux sur l'espacement. Vous devez également tester la version de la base de données, et si ce n'est pas la dernière, appelez ce qui précède pour mettre à jour la base de données. Vous devrez peut-être également effectuer des mises à jour spécifiques pour couvrir les modifications que dbDelta () n'obtient pas correctement (par exemple, supprimer une colonne). Il est facile d'écrire un test if logique simple pour voir si la version a été mise à jour et faire ces mises à jour manuelles via $ wpdb. Par exemple, vous pouvez supprimer une colonne qui n'est plus utilisée.
$installed_ver = get_option(MY_DB_VERSION);
$wpp = $wpdb->prefix . "mypluginname";
if ($installed_ver < 102)
$wpdb->query("ALTER TABLE ${wpp}_movies DROP nft_date");
if ($installed_ver < 107)
$wpdb->query("ALTER TABLE ${wpp}_movies CHANGE lastupdated "
. "lastupdated TIMESTAMP on update CURRENT_TIMESTAMP "
. "NOT NULL DEFAULT CURRENT_TIMESTAMP");
update_option(MY_DB_VERSION, $db_version);
Ceci est simplifié de l'exécution de code, excuses si je l'ai cassé dans le processus de simplification pour la publication.
Gardez également à l'esprit que depuis WordPress 3.9.2, WordPress n'exécute pas toujours le crochet d'activation lors de la mise à jour du plugin (en particulier, si une mise à jour en masse est effectuée à partir de la page Mises à jour du tableau de bord).
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 laprepare
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:
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).la source