WordPress define una clase llamada $wpdb, que contiene un conjunto de funciones utilizadas para interactuar con una base de datos. Su objetivo principal es proporcionar una interfaz con la base de datos de WordPress, pero puede utilizarse para comunicarse con cualquier otra base de datos apropiada. El código fuente de la clase se basa libremente en la clase ezSQL.
WordPress esta creado mediante PHP el cual permite correr las funciones mysql_query()
y mysql_fetch_array()
pero no es recomendable usarlas directamente dentro de WordPress por las siguientes razones:
- La clase wpdb proporciona mejoras de seguridad para proteger tus consultas contra inyección o ataques de tipo SQL.
- En una posible migración o cambio de motor de base de datos por ejemplo de MySQL a PostgreSQL podrían no funcionar y romper todo.
WordPress proporciona una variable de objeto global $wpdb
que es una instancia de la clase wpdb definida en /wp-includes/wp-db.php. Por defecto, $wpdb es la instancia para hablar con la base de datos de WordPress. Para acceder con $wpdb su código PHP de WordPress, debe declarar $wpdb como una variable global utilizando la palabra global, o utilice el superglobal $GLOBALS
de la siguiente forma:
// Declarando $wpdb como global global $wpdb; $results = $wpdb->get_results( 'SELECT * FROM wp_options WHERE option_id = 1', OBJECT ); // Utilizando el superglobal $GLOBALS $results = $GLOBALS['wpdb']->get_results( 'SELECT * FROM wp_options WHERE option_id = 1', OBJECT );
Es importante no olvidar agregar la linea global $wpdb antes de comenzar a realizar nuestras funciones.
El objeto $wpdb no está limitado a las tablas predeterminadas creadas por WordPress; se puede utilizar para leer datos de cualquier tabla de la base de datos (como tablas personalizadas de complementos agregados). Por ejemplo, para seleccionar información de una tabla personalizada llamada wp_form
, se puede hacer lo siguiente.
$myrows = $wpdb->get_results( "SELECT id, name FROM wp_form" );
Con la clase wpdb podemos interactuar con la base de datos creando diferentes tipos de consultas pero hoy solo voy a explicar las 4 mas básicas las cuales corresponden al CRUD ( CREAR, LEER, ACTUALIZAR Y BORRAR).
Pero antes de esto necesitamos tener creada una tabla dentro de nuestra base de datos, esto es muy utilizado en ocasiones cuando instalamos un plugin el cual necesita crear tablas de forma independiente y de esta forma se realiza. Todas estas pruebas las colocaremos en el archivo functions.php
/****************** Crear tabla con la clase wpdb *****************/ function crear_base() { global $wpdb; // Con esto creamos el nombre de la tabla y nos aseguramos que se cree con el mismo prefijo que ya tienen las otras tablas creadas (wp_form). $table_name = $wpdb->prefix . 'form'; // Declaramos la tabla que se creará de la forma común. $sql = "CREATE TABLE $table_name ( `id` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, UNIQUE KEY id (id) );"; // upgrade contiene la función dbDelta la cuál revisará si existe la tabla. require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); // Creamos la tabla dbDelta($sql); } // Ejecutamos nuestra funcion en WordPress add_action('wp', 'crear_base');
Con esto hemos agregado una nueva tabla a toda nuestra base de datos con el nombre wp_form
y ahora si procederemos a realizar operaciones en nuestra tabla.
Insertar
Como observamos anteriormente se creo una nueva tabla con tres campos (id, nombre, email) el id no lo tocaremos pues solo sirve para autoincrementarse cada vez que se agreguen mas datos, entonces vamos a insertar un nombre y un email para cada fila creada.
La manera de insertar una nueva fila se realiza de la siguiente forma:
<?php $wpdb->insert( $table, $data, $format ); ?>
table: Es de tipo (string) y corresponde al nombre de la tabla donde se insertara la fila o el campo.
data: Es la información a agregar y debe ir por medio de un (array).
format: Este es opcional de tipo (array|string) es una matriz de formatos que se asignarán a cada uno de los valores en los datos.
En nuestro caso quedaría de la siguiente forma:
/****************** Insertar *****************/ function insertar_wpdb(){ global $wpdb; $wpdb->insert( 'wp_form', array( 'nombre' => 'Andres Dev', 'email' => '[email protected]' ) ); } // Ejecutamos nuestro funcion en WordPress add_action('wp', 'insertar_wpdb');
Notase que estoy utilizando el action hook wp
el cual se ejecuta luego de haber actualizado el WordPress entonces para que puedan ejecutar cada una de las funciones es necesario solo actualizar WP.
Actualizar
Ahora actualizaremos la fila creada por medio de la siguiente estructura:
<?php $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); ?>
En nuestro caso quedaría de la siguiente forma:
/****************** Actualizar *****************/ function actualizar_wpdb(){ global $wpdb; $wpdb->update( 'wp_form', // Datos que se remplazarán array( 'nombre' => 'Bogotá', 'email' => 'www.andres-dev.com' ), // Cuando el ID del campo es igual al número 1 array( 'ID' => 1 ) ); } // Ejecutamos nuestro funcion en WordPress add_action('wp', 'actualizar_wpdb');
Y de esta forma hemos actualizado el campo.
Leer
Ahora vamos a leer la información que está en la tabla wp_form
y que sea mostrado en nuestro WP:
/****************** Leer *****************/ function leer_wpdb(){ global $wpdb; $registros = $wpdb->get_results( "SELECT nombre, email FROM wp_form" ); echo "Registro #1. Nombre: " . $registros[0]->nombre . ", Email: " . $registros[0]->email . "<br/>"; } // Ejecutamos nuestro funcion en WordPress add_action('wp', 'leer_wpdb');
Lo que realizamos fue mostrar la consulta desde el header de nuestro WP.
Borrar
Y por último vamos a borrar nuestro registro por medio de la siguiente estructura que nos brinda la clase wpdb
la cual es muy similar a la de insertar.
<?php $wpdb->delete( $table, $where, $where_format = null ); ?>
En nuestro caso quedaría de la siguiente forma:
/****************** Borrar *****************/ function borrar_wpdb(){ global $wpdb; $wpdb->delete('wp_form', array('ID' => 1 )); } // Ejecutamos nuestro funcion en WordPress add_action('wp', 'borrar_wpdb');
Eliminando por completo nuestra fila.
Funciones mas utilizadas
Las cuatro funciones vistas anteriormente hacen parte de las básicas utilizadas siempre que deseamos interactuar con una base de datos de cualquier tipo, por esta razón les dejaré a continuación un listado de otras que también puede utilizar con la clase wpdb.
- get_var(): Devuelve una variable ( un único resultado, un valor,..)
- get_row(): Devuelve una fila de una tabla de la base de datos
- get_col(): Devuelve una columna de una tabla de la base de datos
- get_results(): Devuelve una lista de resultados ( las mas común)
- insert(): Para realizar interacciones $wpdb->insert( $table, $data, $format )
- replace(): Para actualizar tablas y reemplazos
- update(): Para actualizar una fila
- delete(): Para borrar una fila
- query(): Para cualquier consulta
- prepare(): Se usa para proteger de ataques de inyección de sql
Lo visto anteriormente es la forma correcta de trabajar con la base de datos de WordPress ya sea si estamos creando una plantilla, un plugin o cualquier otra cosa que se nos ocurra, no olvides comentar si te ha gusta este artículo y compartirlo con toda la comunidad 💈.