Consultas avanzadas de WordPress, Parte 2
Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)
En el último artículo, echamos también un vistazo al esquema básico de la base de datos de WordPress, a las consultas y a cómo empezar a recuperar información de la base de datos de WordPress. Además, echamos un vistazo a la clase wpdb de WordPress, la cual hace que sea increíblemente fácil comenzar a ejecutar consultas en la base de datos. Si no has leído el último artículo, asegúrate de leerlo, ya que esta serie se basa en él.
En este artículo, vamos a echar un vistazo a cómo realizar un seguimiento de los errores que se producen durante la ejecución de nuestras consultas y la variedad de formas de recuperar datos de una base de datos de WordPress.
Una palabra sobre las notificaciones de errores
Una de las cosas más frustrantes de la programación es tener que lidiar con los distintos errores y advertencias que ocurren mientras trabajamos en nuestros proyectos. Pero son un mal necesario, ¿verdad? Nos dan un toque de atención sobre cuándo hemos hecho algo mal de manera que nuestros usuarios no lo experimenten.
La cosa es que no se limitan únicamente al código de aplicación como PHP o código del lado cliente como JavaScript. Las bases de datos también pueden generar errores. Dado que actualmente estamos hablando del trabajar con las bases de datos, tiene sentido activar el registro SQL.
Gracias al objeto wpdb, es muy fácil habilitar los mensajes de error cuando se trabaja con consultas de base de datos en WordPress.
Asegúrate de que haya declarado la variable wpdb como global y, a continuación, simplemente llama a la siguiente función:
1 |
<?php
|
2 |
global $wpdb; |
3 |
$wpdb->show_errors(); |
4 |
?>
|
El código siguiente genera un ejemplo práctico y sencillo de visualización de un error SQL. Añade esto a cualquiera de los archivos PHP de tu tema (hacerlo en index.php o single.php resultará fácil) y luego carga la página en un navegador:
1 |
<?php
|
2 |
global $wpdb; |
3 |
$wpdb->show_errors(); |
4 |
$result = $wpdb->get_results('SELECT * FROM $wpdb->post'); |
5 |
?>
|
Útil, ¿no?
Si has terminado con el desarrollo y las pruebas y estás listo para la implementación, puedes deshabilitar los informes de errores invocando hide_errors().
Obtener un único valor
Cuando se trata de leer datos de una base de datos, es posible extraer una fila completa en una matriz, recorrer en bucle la matriz hasta que encuentras el valor que necesitas y, a continuación, continuar trabajando. La cuestión es que hay mejores maneras de recuperar valores desde el punto de vista de la claridad del código y el rendimiento.
Para recuperar un único valor, no es necesario recuperar una fila completa. En su lugar, deseas consultar solo el valor único. La API de WordPress proporciona una función get_var() para ese propósito en concreto.
Por ejemplo, supongamos que quieres recuperar el título de la entrada más reciente. Para ello, la consulta deberá recuperar una sola entrada ordenada según la fecha más reciente.
1 |
<?php
|
2 |
global $wpdb; |
3 |
$last_title = $wpdb->get_var("SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date DESC"); |
4 |
echo $last_title; |
5 |
?>
|
Tranquilo, ¿eh?
Claramente, el código muestra que solo intenta recuperar una variable (o valor) específico y que no tienes que realizar ciclos en la sobrecarga de recorrer en bucle una colección o extraer más información de la que realmente necesitas.
Recuperar una fila completa
Por otro lado, supongamos que realmente deseas recuperar una fila completa (también denominada registro) de datos. Tal vez desees hacer algún tipo de visualización de toda la información asociada a algo en la base de datos o tal vez necesites examinar varios valores relacionados con un solo registro.
Al igual que la función get_var(), WordPress también proporciona la función get_row() que se utiliza exactamente para este propósito: recupera una sola fila de datos y los devuelve en uno de los siguientes tres formatos: un objeto, una matriz asociativa o una matriz numéricamente indexada.
Para los fines de este ejemplo, vamos a recuperar los resultados en una matriz asociativa en donde se pueda acceder al valor con la clave del nombre de columna.
De acuerdo con nuestro ejemplo anterior, digamos que queremos recuperar toda la información relacionada con la última entrada. Ten en cuenta que estamos añadiendo ARRAY_A como segundo parámetro, esto controla cómo se devuelven los resultados:
1 |
<?php
|
2 |
global $wpdb; |
3 |
$last_post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date DESC", ARRAY_A); |
4 |
?>
|
A partir de aquí, podemos imprimir ciertos valores:
1 |
<?php
|
2 |
echo $last_post['post_title']; |
3 |
?>
|
Imprimir toda la matriz:
1 |
<?php print_r($last_post); ?> |
O incluso recorrer los resultados:
1 |
<?php
|
2 |
foreach($last_post as $post) { |
3 |
echo $post; |
4 |
}
|
5 |
?>
|
Extraer una fila completa es ideal cuando necesitas obtener varias piezas de información o toda la información asociada a una única fila.
Leer una columna completa
Por supuesto, en ocasiones, recuperar una fila no es en absoluto lo que buscamos. Tal vez estemos creando una página de archivos y estamos buscando una manera fácil de recuperar todos los títulos de las entradas de un blog concreto.
En este caso, lo que buscas es recuperar una columna completa. E igualmente, WordPress proporciona una función get_col() para hacer exactamente eso.
Así que, como mencionamos anteriormente, vamos a intentar recuperar todos los títulos de las entradas que existan en el sistema:
1 |
<?php
|
2 |
global $wpdb; |
3 |
$post_titles = $wpdb->get_col("SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date DESC"); |
4 |
?>
|
Los resultados son devueltos en una matriz indexada numéricamente de forma que podamos recorrerlos o acceder a ellos mediante sus claves numéricas:
1 |
<?php echo $post_titles[0]; ?> |
¿Qué pasa con los resultados genéricos?
Obviamente, recuperar valores, filas y columnas de la base de datos de WordPress no es terriblemente complicado; sin embargo, hay momentos durante los cuales estamos buscando recuperar una variedad de resultados. Además de eso, siempre habrá momentos en los que necesitamos recorrer en bucle cierta información para mostrarla en la pantalla.
Para ello, WordPress proporciona una función genérica get_results() que es ideal en esta situación. En concreto, la función get_results() devolverá una matriz en la que cada fila se encuentra en un índice de la misma.
Imagina que estamos buscando mostrar los títulos y la fecha de todas las entradas cuya publicación esté programada actualmente, pero que en realidad no son publicadas y después mostramos su información en pantalla:
1 |
<?php
|
2 |
global $wpdb; |
3 |
$scheduled_posts = $wpdb->get_results("SELECT post_title, post_date FROM $wpdb->posts WHERE post_status = 'future' ORDER BY post_date DESC", ARRAY_A); |
4 |
|
5 |
foreach($scheduled_posts as $post) { |
6 |
echo $post['post_title']; |
7 |
echo $post['post_date']; |
8 |
}
|
9 |
?>
|
get_results() proporciona una flexibilidad increíble, especialmente cuando lo combinas con la realización de consultas más avanzadas, como unirse a otras tablas.
Próximamente...
Tener este tipo de acceso y flexibilidad con la base de datos de WordPress realmente lleva el desarrollo de temas y plugins a un nuevo nivel. Al tomar esto y combinarlo con tipos de entradas personalizadas, taxonomías y otros aspectos de WordPress puedes crear algunas herramientas realmente potentes.
Pero tampoco estamos limitados a la lectura de datos. En el siguiente artículo, echaremos un vistazo a cómo podemos manipular los datos ya existentes en la base de datos y cómo podemos introducir nuevos valores propios.



