La forma correcta de hacer esto en estos días es incluir su esquema como un archivo en la fuente del complemento y usar la función incorporada de WordPress dbDelta () para actualizar la base de datos según sea necesario usando ese esquema. El código real requerido es muy simple:
$sql = file_get_contents( plugin_dir_path(__FILE__) . "/schema.sql" );
dbDelta( $sql );
Esto creará y actualizará la base de datos para usted según sea necesario. Cuando lo verifiqué por última vez, no eliminó las columnas antiguas no utilizadas, por lo que deberá codificarlo mediante una verificación de versión. Esta es una característica hermosa de WordPress y un gran ahorro de tiempo. Tenga cuidado al crear el archivo schema.sql que copia el espaciado en una exportación de esquema mysql exactamente como el código dbDelta () tiene fama de ser muy exigente con el espaciado. También debe probar la versión de la base de datos y, si no es la última, llame a lo anterior para actualizar la base de datos. Es posible que también deba realizar actualizaciones específicas para cubrir los cambios que dbDelta () no realiza correctamente (por ejemplo, eliminar una columna). Es fácil escribir una prueba simple de lógica para ver si la versión se ha actualizado y hacer estas actualizaciones manuales a través de $ wpdb. Por ejemplo, puede colocar una columna que ahora no se utiliza.
$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);
Esto se simplifica al ejecutar código, disculpas si lo he roto en el proceso de simplificarlo para su publicación.
También tenga en cuenta que a partir de WordPress 3.9.2, WordPress no siempre ejecuta el enlace de activación al actualizar el complemento (específicamente, si se realiza una actualización masiva desde la página Actualizaciones del tablero).
En resumen, sí, la
$wpdb
clase. Ver Codex para más información.Cada vez que interactúa con una tabla personalizada (o cualquier tabla, en realidad) que debe pasar por
$wpdb
- en particular asegurarse de que está familiarizado con elprepare
método que ayuda lata escapa consultas y evitar las inyecciones.Ya debería estar familiarizado, ya que debería estar usándolo para crear la tabla. En su gancho de instalación, debería tener algo como:
Este código se ejecuta cada vez que se activa el complemento (es decir, no solo se instala). Por lo tanto, se ejecutará cuando alguien actualice el complemento automáticamente . Nota: Si se actualizan reemplazando el complemento manualmente, entonces no lo hará, por lo que deberá activar el código anterior
admin_init
cuando se actualice su complemento (almacene el número de versión en la tabla de opciones, verifique con la versión actual) .Ahora, normalmente no desea que el
CREATE TABLE
comando SQL se ejecute cada vez que actualice el complemento, aquí es dondedBDelta()
entra.Antes de ejecutar el comando anterior, comprueba si la tabla existe. Además, verifica los tipos de columna. Entonces, si la tabla no existe, la crea, si es así, pero algunos tipos de columnas han cambiado, las actualiza y, si no existe una columna, la agrega.
Desafortunadamente, si elimina una columna de lo anterior, no elimina automáticamente la columna. Para eliminar columnas / tablas, debe especificarlas específicamente
DROP
(verificando que existan antes que usted).fuente