Skip to main content

Crear una tabla en wordpress

En este ejemplo nos ha surgido la necesidad de crear una tabla en la base de datos de wordpress para guardar unos registros, para ello vamos a utilizar la función dbDelta, el código sería el siguiente:

require './wp-load.php';
require './wp-admin/includes/upgrade.php';

global $wpdb;

$prefix = $wpdb->prefix;

$crearTabla = "CREATE TABLE IF NOT EXISTS `".$prefix."bloques_datos2` (
  `id_bloque_dato` int(11) NOT NULL AUTO_INCREMENT,
  `id_post` int(11) NOT NULL,
  `id_bloque` int(11) NOT NULL,
  `bloque` varchar(255) NOT NULL,
  `key_bloque` varchar(255) NOT NULL,
  `valor_bloque` longtext NOT NULL,
  `id_subbloque` int(11) NOT NULL,
  `key_subbloque` varchar(255) NOT NULL,
  `valor_subbloque` longtext NOT NULL,
  PRIMARY KEY (`id_bloque_dato`),
  KEY `id_bloque` (`id_bloque`),
  KEY `id_post` (`id_post`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8";

dbDelta($crearTabla);

Explicación del código

Lo primero que hay que hacer es cargar los ficheros wp-load.php y upgrade.php (en el caso de que ya estén cargados no es necesario, en este ejemplo el código esta en un fichero fuera de la jerarquía de wordpress).

Con «$prefix = $wpdb->prefix;» obtenemos el prefijo de las tablas para incorporarlo a la query.

$crearTabla contiene el «Create table» que va a ejecutar dbDelta, que es la función que se encargara de ejecutar la consulta pasada.

Pruebas realizadas con la versión 5.4.1 de wordpress.

PD: En el caso de no funcionar, comprobar que el «Create table» es correcto.

Activar/Enable en Mamp only_full_group_by (Mysql)

Como activar (enable) el parámetro de mysql only_full_group_by

Este es el error que daba el servidor mamp al realizar una consulta con group by:

Statement could not be executed (42000 - 1055 - Expression #15 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'basededatos.tabla.campo' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by)

Entramos al Phpmyadmin normalmente esta en «http://localhost/phpmyadmin», ahí nos dirigimos a la base de datos «mysql» vamos a la pestaña «Sql»

Ejecutamos:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Solucionado ya podemos realizar consultas con group_by.

Pruebas realizadas con:

  • Mamp Versión 5.1
  • Mysql Versión 5.7.23
  • PhpMyAdmin 4.8.3