1. Code
  2. WordPress

Dominar los metadatos de WordPress: Comprender y usar matrices

Scroll to top
8 min read

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

En la primera parte de esta serie, cubrimos qué son los metadatos de WordPress, cómo se pueden recuperar y los distintos tipos de datos (como objetos o matrices) en los que se pueden devolver. Ahora es el momento de aprender sobre los diferentes tipos de matrices.

Cuando se escribe una matriz manualmente, conoces cuál es su estructura y cuál es el nombre de cada índice. Pero cuando se crean matrices mediante una consulta a la base de datos, vas a tener que hacer algún trabajo como detective para determinar la estructura de los datos devueltos y los nombres de los índices.

Tipos de matriz

Antes de saltar realmente a los diversos tipos de matrices que tenemos a nuestra disposición, es importante entender que una matriz PHP es cualquier variable que contenga más de una pieza de datos.

Matrices asocitivas frente a indexadas

El ejemplo más simple de una matriz es una lista de valores separados por comas, dentro de la función array(), como la siguiente:

1
$heros = array( 'Luke', 'Leia', 'Han');

PHP indexa automáticamente matrices creadas en listas separadas por comas, asignando a cada elemento un índice numérico, comenzando en cero. Esto significa que podríamos recuperar el valor del segundo elemento 'Leia' de la matriz $heroes especificando el índice 1.

Este es el aspecto que tendría esto:

1
$heroes = array( 'Luke', 'Leia', 'Han');
2
echo $heroes[ 1 ];

Para obtener un ejemplo práctico de WordPress, echa un vistazo a la función wp_get_attachment_image_src() que devuelve una matriz indexada de información sobre una imagen.

Podemos obtener la URL, el ancho y el alto de una imagen utilizando los índices numéricos de la matriz que devuelve esta función (ten en cuenta que el '7' que se pasa a la función se refiere al ID del archivo adjunto, y en este caso es arbitrario para los fines de nuestro ejemplo):

1
$img = wp_get_attachment_image_src( 7 );
2
echo '<img src="' . $img[0] . >" width="' . $img[1] . '" height="' . $img[2] . '" />';

Por supuesto, realizar un seguimiento de los números de índice en matrices puede resultar confuso, por lo que PHP nos permite crear matrices asociativas. Volviendo a nuestro ejemplo $heroes, podríamos dar a cada elemento de nuestra matriz un nombre:

1
$heroes = array(
2
	'unlikely_hero'   => 'Luke',
3
	'badass_princess' => 'Leia',
4
	'lovable_rouge'   => 'Han',
5
);

Denominamos claves a estos nombres. En esta matriz, diríamos que la clave 'unlikely_hero' tiene el valor 'Luke'. Podemos obtener el valor de esta clave colocándola entre corchetes junto a la variable. Por ejemplo:

1
echo $hereos['unlikely_hero'];

Matrices multidimensionales

Hasta ahora, hemos examinado matrices que son esencialmente una lista de elementos, pero las matrices también pueden estar compuestas de otras matrices. A estas matrices las denominamos multidimensionales. Al crear una matriz multidimensional, esencialmente tenemos una lista de listas, donde cada índice o clave de nuestra matriz está definida por otra matriz.

Por ejemplo:

1
$heroes => array(
2
		'Luke' => array(
3
			'full_name'   => 'Luke Skywalker',
4
			'home_planet' => 'Tatooine',
5
			'trope'       => 'Unlikely Hero',
6
		),
7
		'Leia' => array(
8
			'full_name'   => 'Leia Organa',
9
			'home_planet' => 'Alderaan',
10
			'trope'       => 'Badass Princess',
11
		),
12
		'Han' => array (
13
			'full_name'   => 'Han Solo',
14
			'home_planet' => 'Corell',
15
			'trope'       => 'Lovable Rouge',
16
		),
17
);

Este tipo de matriz es muy útil ya que nos permite recorrerla en bucle, escribiendo nuestro marcado una vez y dejando que PHP lo recorra tantas veces como sea posible.

Herramientas para trabajo de detective

Como dije al principio de este artículo, a menudo, trabajar con metadatos puede implicar algún trabajo como detective para descubrir la estructura de la matriz. Como cualquier detective, tienes que asegurarte de que tiene las herramientas adecuadas para el trabajo.

Los desarrolladores aficionados modifican los archivos de sus temas para generar temporalmente valores de matrices. Pero si quieres trabajar de forma rápida y eficiente, lo harás de forma profesional, con la consola de depuración.

Los desarrolladores novatos modifican los archivos de sus temas para generar temporalmente valores de matrices. Pero si quieres trabajar de forma rápida y eficiente, lo harás de la manera profesional, con la consola de depuración.

¿Qué es la consola de depuración?

Debug Console es uno de los varios complementos para el plugin Debug Bar que no le debería faltar a ningún desarrollador de WordPress. Si aún no tienes instalado el plugin Debug Bar en el entorno de desarrollo, deberías hacerlo lo antes posible.

Una vez tengas estos dos plugins instalados podrás acceder a una consola desde la barra de administración, en donde podrás ejecutar código PHP. Ahora, en lugar de modificar un archivo de tema, guardar y actualizar, podrás simplemente experimentar con el código directamente en el navegador.

Sencillamente haz clic en 'ejecutar' y observa los resultados en la parte inferior de la pantalla. Lo mejor de todo es que cualquier error que generes se mostrará en el cuadro de resultados, no en el front-end de tus sitios. Los errores fatales interrumpen la consola de depuración, no el sitio.

Por cierto, sólo he arañado la superficie de lo que Debug Bar puede hacer. Además, tanto Debug Bar como Debug Console, así como una tonelada de otras utilidades interesantes se incluyen en Developer Plugin, el cual recomiendo altamente. A medida que aprendas a trabajar con metadatos también encontrarás bastante útil el plugin Debug Bar Post Meta.

var_dump vs print_r

Ahora que tienes un lugar para hacer tus pruebas, ¿cómo explorar los interiores de una matriz. Para este trabajo, PHP nos da dos útiles funciones que nunca usaríamos para crear una salida front-end, pero que son perfectas para las labores de diagnóstico: var_dump() y print_r().

Ambas funciones toman una variable que contiene una matriz como entrada y generan su contenido para que lo examinemos. var_dump() contiene más información, como por ejemplo, el tipo de datos (cadena, booleano, entero, etc.) y la longitud de los mismos, mientras que print_r() está diseñada para ser más legible por el ser humano y omite esta información adicional.

Uso de var_dump para buscar un índice o clave

var-dumpvar-dumpvar-dump

Aquí tienes una captura de pantalla de un var_dump de los metadatos de una entrada. Muestra cómo profundicé hasta un único campo. Mi objetivo era obtener el valor del campo meta title (título) creado por el plugin WordPress SEO by Yoast.

Como se puede ver en el var_dump, que generé a partir de todos los campos meta para el ID de entrada #1 con get_post_meta( 1 ); estaba trabajando con una matriz asociativa y multidimensional, que contenía una matriz indexada con un solo índice. Al examinar el var_dump, descubrí que la clave que necesitaba era "_yoast_wpseo_title" y que la información real que necesitaba estaba en el primer índice. Para acceder a eso puse la clave '_yoast_wpseo_title' en su propia variable, y luego hice echo del primer índice de la siguiente manera:

1
$meta = get_post_meta(1);
2
$seo_title = $meta['_yoast_wpseo_title'];
3
echo '<div>SEO TITLE: ' . $seo_title[0] . '</div>';

Este es un buen ejemplo para ilustrar la estrategia a llevar a cabo para encontrar la clave necesaria, pero no es la forma más eficiente de obtener la información, una vez conoces la clave. Por lo tanto, después de hacer el trabajo de detective para encontrar la clave correcta, me gustaría especificar directamente la clave en la llamada a get_post_meta(). Cuando necesitamos una sola clave, puedes especificarla directamente en el segundo argumento de get_post_meta().

Es importante tener en cuenta que get_post_meta(1, '_yoast_wpseo_title' ); no devolverá el valor que necesitamos, sino que devolverá una matriz. Al añadir true para el tercer argumento 'single' podemos obtener sólo el primer índice, que es lo que necesitamos.

Por lo tanto, para hacer eco directamente del título SEO, todo en una línea, tendríamos que hacer esto:

1
get_post_meta( 1, '_yoast_wpseo_title', true );

Uso de get_user_meta()

Hasta ahora en esta serie, te he mostrado cómo trabajar con la tabla wp_postmeta, que contiene todos los campos personalizados añadidos a un tipo de entrada.

Los usuarios también pueden tener campos personalizados. Los metadatos de usuario, los campos adicionales añadidos a los perfiles de usuario funcionan de la misma manera que los metadatos de entradas, pero se almacenan en la tabla wp_usermeta. Cuando trabajamos con metadatos de usuario, en lugar de get_post_meta(), utilizamos get_user_meta().

Estas dos funciones funcionan de forma idéntica, simplemente obtienen sus datos de dos tablas diferentes de la base de datos.

Este es un ejemplo que usa get_user_meta() para generar una imagen personalizada a modo de enlace a las entradas de un autor:

1
$users = array ( 55, 89, 144, 233, 377 );
2
foreach ( $users as $user ) {
3
	$link = get_author_posts_url( $user );
4
	$img = get_user_meta( $user, 'link_img', ;
5
	echo '<a href="' . $link . '"><img src="' . $img . '" /></a>';
6
} //end foreach loop

Qué viene a continuación...

En las dos partes de esta serie, hemos examinado los distintos tipos de metadatos, cómo se almacenan y cómo podemos recuperarlos. Además, hemos analizado los dos tipos de matrices que ofrece PHP, y cómo se corresponde esto con los metadatos asociados con entradas y usuarios.

En la siguiente parte de la serie, echaremos un vistazo a cómo podemos iterar a través de cada tipo de datos para que tengamos el poder y la flexibilidad de personalizar la salida de nuestras plantillas.