Skip to main content

Mostrar consultas realizadas por mi WordPress

Si lo que estamos buscando es optimizar nuestro wordpress, esta función te puede venir bien para saber cuantas consultas realiza a la base de datos.

Lo primero que tenemos que hacer es habilitar SAVEQUERIES en nuestro fichero «wp-config.php«

define('SAVEQUERIES', true);

Esto le dice a WordPress que guarde todas las consultas.

Para obtener la consultas realizadas hay que utilizar $wpdb->query, añadimos este código a nuestra página (por ejemplo en el footer)

global $wpdb;
echo '<pre>';
print_r($wpdb->queries);
echo '</pre>';

Obtendremos:

[0] => Array
        (
            [0] => SELECT option_name, option_value FROM dg_options WHERE autoload = 'yes'
            [1] => 0.00107002258301
            [2] => require('wp-blog-header.php'), require_once('wp-load.php'), require_once('wp-config.php'), require_once('wp-settings.php'), wp_not_installed, is_blog_installed, wp_load_alloptions
            [3] => 1588409077.08
            [4] => Array
                (
                )

        )

Pruebas realizadas en la versión de WordPress 5.4.1

Cuantas consulta a la base de datos realiza mi WordPress

WordPress nos facilita una función (get_num_queries()) para obtener el número de consultas a la base de datos:

get_num_queries()

Ejemplo:

Añado este código al fichero footer.php justo antes de cerrar el body (</body).

<?php echo '<!-- ' . get_num_queries() . ' consultas a la base de datos -->'; ?>

Para ver la cantidad tienes que ver el código fuente puesto que esta comentado en el html.

Consultar los posts de wordpress desde un fichero externo

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.

Consulta una colección (firebase) desde javascript

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»

db.collection("coches").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
           console.log("Id",doc.id);
           console.log("Datos",doc.data());
        });
    });

Mostraremos por consola el «Id» y los «Datos» de nuestra tabla «coches»

Si queremos ordenar el listado por un campos, habría que añadir «orderBy».

db.collection("coches").orderBy("fechaPublicacion", "desc").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
           console.log("Id",doc.id);
           console.log("Datos",doc.data());
        });
    });

Nos arrojara el listado de coches ordenado por «fechaPublicacion».

El código javascript (yo lo he incorporado en un fichero html) completo quedaría así:

<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();

    firebase.initializeApp(config);
    var db = firebase.firestore();

    db.collection("coches").orderBy("fechaPublicacion", "desc").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            console.log("Id", doc.id);
            console.log("Datos", doc.data());
        });
    });

</script>

Si queremos hacer una consulta para filtrar los resultados sería añadiendo «where» :

db.collection("coches").where("diesel", "==", "si")
.get().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
           console.log("Id", doc.id);
           console.log("Datos", doc.data());
    });
});

Para recuperar un solo documento por su id:

 db.collection("coches").doc("5LMBbOG8vHWAEKb77wBv")
    .get().then(function (doc) {
            var coche = doc.data();
            console.log("Coche", coche);
    }).catch(function (error) {
            console.log("Error", error);
    });