Plugins (XVI) Tablas personalizadas

Aunque podemos guardar y crear campos dentro de las tablas de la base de datos de wordpress, en ocasiones puede resultar interesante crear tablas personalizadas para guardar los datos.

Para crear una tabla personalizada en la base de datos, debemos crear un función de instalación que se ejecutará cuando se ejecute el plugin.

register_activation_hook(__FILE__, 'prowp_install');

function prowp_install(){
	
}

Una vez que tenemos la funcion de instalación debemos de decidir el nombre de la tabla personalizada. Para ello debemos de obtener el prefijo de la tabla personalizada por medio del valor global $wpdb->prefix de la siguiente forma:

global $wpdb;
//definimos el nombre de la tabla personalizada
$nombre_tabla = $wpdb->prefix . 'prowp_data';

Con este código almacenamos la tabla wp_prowp_data (wp_ es el prefijo y el resto el nombre que pongamos a la tabla) en la variable $nombre_tabla.

El siguiente paso es diseñar la consulta SQL que creará la nueva tabla, creando una consulta en la variable $sql antes de ejecutarla.

También debemos de crear el archivo upgrade.php antes de ejecutar la consulta.

$sql = "CREATE TABLE" . $nombre_tabla ."(
	id mediumunit(9) NOT NULL AUTO INCREMENT,
	time bigint(11) DEFAULT '0' NOT NULL,
	name tinytext NOT NULL,
	text text NOT NULL,
	url VARCHAR(55) NOT NULL,
	UNIQUE KEY id (id)
	);";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php');
//ejecuta la consulta para crear la tabla
dbDelta($sql);

Una vez que ejecutamos este código la nueva tabla se crea en la base de datos, la función dbDelta() comprueba primero que la tabla no exista ya.

También nos puede resultar muy recomendable guardar el número de versión de la estructura, por si en el futuro es necesario cambiarla.

//indica la version de la estructura de tablas
$prowp_db_version = '1.0';
//guarda el numero de version de la estructura de tablas
add_option('prowp:db_version', $prowp_db_version);

Si queremos actualizar la estructura de las tablas para una nueva versión, podemos comparar los números de versión de las tablas:

$installed_ver = get_option('gmp_db_version');
if($installed_ver != $prowp_db_version){
	//actualiza la tabla de la base de datos
	//actualiza la version de la tabla
	update_option('gmp_db_version', $prowp_db_version);
}

Finalmente nuestro código de forma general quedaría así:

register_activation_hook(__FILE__, 'prowp_install');

function prowp_install(){
	global $wpdb;
	//definimos el nombre de la tabla personalizada
	$nombre_tabla = $wpdb->prefix . 'prowp_data';

	$sql = "CREATE TABLE" . $nombre_tabla ."(
		id mediumunit(9) NOT NULL AUTO INCREMENT,
		time bigint(11) DEFAULT '0' NOT NULL,
		name tinytext NOT NULL,
		text text NOT NULL,
		url VARCHAR(55) NOT NULL,
		UNIQUE KEY id (id)
		);";
	require_once( ABSPATH . 'wp-admin/includes/upgrade.php');
	//ejecuta la consulta para crear la tabla
	dbDelta($sql);

	//indica la version de la estructura de tablas
	$prowp_db_version = '1.0';
	//guarda el numero de version de la estructura de tablas
	add_option('prowp:db_version', $prowp_db_version);


}

Antes de crear tablas personalizadas debemos de estudiar si su utilización es necesaria ya que debemos de evitar su uso en todo lo posible ya que tenemos otras formas de guardar información por medio de la API de opciones, tablas wp_*meta y tipos de entrada personalizados. Todos ellos vistos en este curso.