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.
Para resetear las key de un array vamos a utilizar la función array_values() de php, dicha función recibe por parámetro un array, retorna el array con las key reseteadas.
En este ejemplo vamos a realizar una consulta a la base de datos de wordpress utilizando $wpdb desde un fichero externo php (fuera de la estructura de wordpress)
WordPress $wpdb nos proporciona un objeto global para realizar las consultas a la base de datos, dicho objeto es una instancia de /wp-includes/wp-db.php.
Empécemos con el ejemplo:
Creamos un fichero php, yo le llamare exportacion.php y pegamos el siguiente código:
<?php
require './wp-load.php';
global $wpdb;
$prefix = $wpdb->prefix;
$table = $prefix . "posts";
$posts = $wpdb->get_results("SELECT * FROM $table");
print_r($posts);
Detallo, mi ejemplo esta creado en la raiz de ficheros:
require './wp-load.php';
Con este require añadimos toda la infraestructura de wordpress.
global $wpdb;
Invocamos a la variable global $wpdb (es el objeto que se va a encargar de realizar la consulta)
$prefix = $wpdb->prefix;
El atributo prefix nos devuelve el prefijo de las tablas (wp_), esto es necesario si has cambiado el prefijo de las tablas (yo lo suelo hacer).
$table = $prefix . "posts";
Prepara una variable con el nombre de la tabla que voy a realizar la consulta.
$posts = $wpdb->get_results("SELECT * FROM $table");
$wpdb->get_results realiza la consulta a la base de datos y me añade los registro a la variable $posts.
Ya podríamos recorrer la variable $posts y obtener los post.
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.
Vamos a consulta una colección de firebase (Cloud Firestore) desde javascript.
Lo primero que necesitamos es los datos de configuración que nos lo va a proporciona el mismo firebase, entramos en https://console.firebase.google.com/ seleccionamos el proyecto, a continuación pinchamos en rulina de la izquierda (ver la imagen)
Una vez dentro de la configuración bajamos hasta el apartado «Firebase SDK snippet» copiamos el código javascript y nos lo llevamos a nuestra fichero html.
<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-app.js"></script>
<!-- TODO: Add SDKs for Firebase products that you want to use
https://firebase.google.com/docs/web/setup#available-libraries -->
<script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-analytics.js"></script>
<script>
// Your web app's Firebase configuration
var firebaseConfig = {
apiKey: "xxxxxxxxxxxxxxxxxxxx",
authDomain: "xxxxxxxxxxxx.firebaseapp.com",
databaseURL: "https://xxxxxxxxxxxx.firebaseio.com",
projectId: "xxxxxxxxxxxx",
storageBucket: "xxxxxxxxxxxx.appspot.com",
messagingSenderId: "xxxxxxxxxxxx",
appId: "1:xxxxxxxxxxxx:web:xxxxxxxxxxxx",
measurementId: "G-xxxxxxxxxxxx"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
firebase.analytics();
</script>
En el siguiente código vamos a iniciar la conexión a partir de la configuración que hemos obtenido ante desde firebase.
firebase.initializeApp(config);
var db = firebase.firestore();
Ya estaríamos conectado, para realizar una consulta de datos sería con la propiedad «collection»