En alguna ocasión nos puede interesar realizar una consulta mySQL a una base de datos de WordPress externa con el fin de recuperar la información que allí tengamos almacenada y que pertenece a otra instalación de WP.
Dicha base de datos puede estar en el mismo hosting WordPress en el que estamos trabajando o en otro diferente y que será donde tengamos la bbdd a la que vamos a hacer la consulta.
En el caso que os presento no he estado empleando un servidor remoto sino local que uso para realizar pruebas, en primer lugar os muestro cómo he obtenido un listado de todos los artículos de un blog externo de WordPress y en un segundo lugar cómo he obtenido un número concreto de artículos que están almacenados en una categoría del blog lejano.
En primer lugar me he creado una nueva template desde donde hago las consultas a la bbdd externa y que me sirve para imprimir la información recuperada y la misma plantilla la he asignado a una página.
A continuación de esto emplearemos la clase wpdb para realizar la conexión a la bbdd externa del siguiente modo donde introduciremos el usuario, pass, nombre y host de la externa. Lo vemos en el siguiente código.
<?php global $wpdb; $wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST ); $wpdb ->show_errors(); $signs = $wpdb->get_results("SELECT * FROM cx_posts WHERE post_type = 'post'"); /*print_r($signs);*/ foreach ($signs as $sign) { echo '<a target="_blank" rel="bookmark noopener noreferrer">guid . '">'. $sign->post_title .'</a><br/>'; } ?> |
cx_ es el prefijo que tengamos en la base de datos remota, por defecto es wp_, por temas de seguridad se desaconseja dejar este prefijo en las instalaciones en WP.
show_errors nos permite conocer si existe algún error al realizar la consulta.
get_results() La función devuelve todo el resultado de la consulta como una matriz
print_r() nos muestra el resultado de la consulta para poder verlo de una forma legible – en el código está comentado para que no aparezca siempre
Finalmente se muestra que se obtenga un listado con todos los artículos de la base de datos remota mediante un foreach.
Es importante ver la base de datos de mySQL para ver cómo se organizan las difererentes tablas, en el artículo se puede ver mejor y además acceder desde vuestro phpMyAdmin a la bbdd correspondiente.
Una vez realizado el proceso ya se muestra el listado con todos los artículos del blog remoto y son impresos sobre nuestra página del blog. Cada elemenento se muestra como un enlace que lleva al post remoto.
Contenido
Consulta MySQL de un número de posts por categoría
Ya hemos visto una consulta sencilla que podemos realizar sobre una base de datos lejana, en el siguiente vemos cómo obtener un cierto número de artículos de una categoría del blog remoto ordenados aleatoriamente.
<?php global $wpdb; $wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST ); $wpdb ->show_errors(); $query = " SELECT * FROM cx_posts LEFT JOIN cx_term_relationships ON cx_posts.ID = cx_term_relationships.object_id LEFT JOIN cx_term_taxonomy ON cx_term_relationships.term_taxonomy_id = cx_term_taxonomy.term_taxonomy_id WHERE cx_posts.post_status = 'publish' AND cx_term_taxonomy.taxonomy = 'category' AND cx_term_taxonomy.term_id = 38 ORDER BY RAND() "; $results = $wpdb->get_results($query); $count=0; foreach($results as $key){ if($count<4){ echo '<a target="_blank" rel="bookmark noopener noreferrer">guid . '">'. $key->post_title .'</a><br/>'; } $count++; } ?> |
En la consulta se hace referencia a la relación entre dos diferentes tablas de la bbdd mediante LEFT JOIN. Sobre la consulta puedes ver más en éste artículo.
En este caso los artículos mostrados pertenecen a la categoría con id=38 del blog remoto, cuyo estado es publicado y además en la query se seleccionan todos los que pertenecen a esa categoría ordenados aleatoriamente para que cada vez se muestren artículos diferentes.
Finalmente para que muestre únicamente cuatro artículos se ha situado un contador para que una vez llegue a dicho valor deje de imprimir los títulos de los artículos.
Dichos títulos estarán vinculados mediante un enlace que llevará al post lejano en el caso que un usuario cliquee sobre el artículo.
Conclusión
A lo largo del post hemos visto como podemos realizar una consulta a una base de datos de otro sitio creado con WordPress en el caso que precisemos recuperar dicha información.
Espero que os sea de utilidad. 🙂