Revista Tecnología

Consulta mySQL en WordPress a una base de datos externa de WP

Publicado el 07 enero 2015 por Santi Navarro @santiacn

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 alojamiento web 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 he estado empleando un servidor 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.

consulta-base-de-datos-de-wordpress-externa

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" href="' $sign->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 es 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.

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" href="' $key->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.

:)


Volver a la Portada de Logo Paperblog