Tablas de bases de datos personalizadas en WordPress: primera parte

Publicado: 2022-06-27

En esta serie de artículos, veremos cómo podemos crear tablas de bases de datos personalizadas en WordPress con o sin un complemento.

¿Cuándo y por qué debo usar tablas de bases de datos personalizadas?

En la mayoría de los casos, las tablas de base de datos de WordPress predeterminadas que se crean cuando instala WordPress son todo lo que necesitará. Estas tablas contienen todo tipo de información, como los tipos de publicaciones y sus metadatos asociados. Entonces, ¿por qué necesitaría una tabla de base de datos personalizada?

Estos entran en juego cuando trabaja con datos que quedan fuera de la información normal utilizada en WordPress. Por lo tanto, es posible que desee colocar datos en una tabla personalizada cuando esté creando un complemento que necesite almacenar información en una base de datos. Es por eso que verá que los complementos como WooCommerce tienen sus propias tablas personalizadas.

Aloje su sitio web con Pressidium

GARANTÍA DE DEVOLUCIÓN DE DINERO DE 60 DÍAS

VER NUESTROS PLANES

Además de ser una forma más ordenada de almacenar información, el uso de tablas separadas puede ayudar a mejorar el rendimiento, ya que las consultas utilizadas no tienen que buscar filas y filas de datos innecesarios. En su lugar, pueden ser dirigidos a la tabla 'correcta' donde pueden encontrar la información requerida de manera más rápida y eficiente. Esto se vuelve muy importante cuando las tablas de la base de datos comienzan a crecer.

Creación de una tabla de base de datos personalizada de WordPress

Digamos que queremos crear un complemento simple que nos ayude a organizar una lista de estudiantes. En realidad, una tarea simple como esta significa que no necesitamos usar tablas personalizadas en absoluto. Un tipo de publicación personalizada haría el trabajo perfectamente.

Sin embargo, por el bien de este ejemplo, este tipo de datos es perfecto para demostrar la teoría detrás de las tablas personalizadas, así que lo utilizaremos. Nota: Asumiremos que posee algunos conocimientos básicos de PHP y mySQL.

Empezando

Para comenzar, crearemos una tabla de base de datos de 'estudiantes' con columnas para nombre, edad, correo electrónico y una identificación única. Vamos a hacer esto creando un complemento personalizado para hacer el trabajo.

NOTA: Si aún no está familiarizado con la forma de crear un complemento personalizado, consulte nuestra guía sobre cómo crear su propio complemento personalizado de WordPress antes de continuar con este tutorial.

Crear los archivos de complemento

Crearemos una carpeta llamada "my-custom-db-tables" en la carpeta de complementos y dentro de ella, un archivo llamado "my-custom-db-tables.php" que contiene este fragmento de código:

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { // THE CODE } register_activation_hook(__FILE__, 'create_the_custom_table');

Lo que hicimos fue introducir la información del complemento para que WordPress lo reconozca. Obviamente, también necesitará una función que agregue el esquema de la tabla a la base de datos, que será la función create_the_custom_table() .

En la mayoría de los casos, solo necesita ejecutar esta función una vez, idealmente cuando el complemento está activado. Por lo tanto, usamos register_activation_hook() que proporciona WordPress para asegurarnos de que la función se ejecute al activarse el complemento.

Definir la estructura de la tabla

Eso sí, aún no pasará nada si activamos el plugin, ya que la función sigue vacía. Así que vamos a completarlo con este código, para crear la tabla:

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . 'students'; $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'create_the_custom_table');

Ahora detengámonos un momento para examinar lo que hemos hecho con este fragmento de código.

En primer lugar, tomamos el prefijo de la tabla usando la clase global de WordPress $wpdb que se comunica con la base de datos. Es el mismo prefijo que se define en el archivo wp-config.php y es una buena práctica usarlo también en su tabla personalizada. También heredaremos la intercalación actual guardándola en la variable $charset_collate para configurarla más adelante en la consulta.

Nuestro próximo paso es definir la estructura de la tabla en la consulta sql para obtener el esquema deseado correctamente. Como dijimos, una columna de identificación, correo electrónico, nombre y edad con el tipo de datos correcto para cada uno.

 $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;";

A continuación, upgrade.php require_once Eso es obligatorio para usar la función dbDelta que viene justo después. Cuando está en WordPress, para crear una tabla de base de datos (o actualizar las tablas existentes a una nueva estructura), necesitamos usar la función dbDelta.

NOTA: En lugar de ejecutar directamente una consulta SQL, esta función se usa para modificar la base de datos mediante la creación o actualización de una tabla, según las instrucciones SQL especificadas. Usando su parámetro $queries , podemos pasar el esquema de nuestra tabla personalizada.

Ahora, si activa el complemento y verifica su base de datos, debería ver que se ha creado la tabla.

Ahora, si lee dentro del archivo wp-admin/includes/upgrade.php , notará que dbDelta() usa la función preg_match() para recuperar información de la declaración SQL. Por eso, debe tener cuidado al editarlo. La documentación oficial proporciona más información sobre esto, pero hemos resaltado los puntos clave a continuación:

  • Debe poner cada campo en su propia línea en su declaración SQL.
  • Debe haber dos espacios entre las palabras PRIMARY KEY y la definición de su clave principal.
  • Debe utilizar la palabra clave CLAVE en lugar de su sinónimo ÍNDICE y debe incluir al menos una CLAVE.
  • La CLAVE debe ir seguida de un solo espacio , luego el nombre de la clave, luego un espacio, luego un paréntesis de apertura con el nombre del campo, luego un paréntesis de cierre.
  • A otras CLAVES que no sean primarias, se les debe dar un nombre. Por ejemplo:
 ... PRIMARY KEY (id), KEY age (age) ...
  • No debe usar apóstrofes ni acentos graves alrededor de los nombres de los campos.
  • Los tipos de campo deben estar todos en minúsculas .
  • Las palabras clave de SQL, como CREATE TABLE y UPDATE, deben estar en mayúsculas .
  • Debe especificar la longitud de todos los campos que aceptan un parámetro de longitud, como int(11) de la columna id, por ejemplo.

También puede haber notado que no verificamos si la tabla ya existe en la base de datos. Eso es porque dbDelta lo hace por nosotros. No hay necesidad de preocuparse por las consultas de actualización. No solo creará la tabla, sino que comprobará si ya existe una tabla con el mismo nombre y, de ser así, no creará la tabla. Solo actualizará la estructura de la tabla existente si es necesario.

Cubriremos esto más en futuros artículos de la serie.

Funcionalidad y Escalabilidad

Entonces, ¿qué debería suceder cuando el complemento se desactiva o se desinstala? Idealmente, debería haber una opción de administrador para elegir si eliminar o no esta tabla de la base de datos si el complemento se desactiva o elimina.

Además, es casi seguro que, tarde o temprano, necesitará cambiar su complemento (para mejorarlo o corregir un error). Tal vez desee modificar la forma en que almacena los datos, agregar columnas a la tabla o cambiar su diseño. Eso significa que debe crear el complemento de una manera que garantice que sea lo más escalable posible y que pueda adaptarse a los cambios que se realicen.

En nuestros próximos artículos de esta serie, profundizaremos en estos temas y le mostraremos cómo puede lograrlo. ¡Vuelve a consultar pronto!