Spanish (Español) translation by Esther (you can also view the original English article)
En las dos primeras partes de esta serie, cubrimos qué metadatos hay en WordPress y cómo trabajar con las matrices que se devuelven típicamente. Ahora que has aprendido a hacer el trabajo de detectives necesario para encontrar la estructura de una matriz (array), es hora de aprender a usar bucles (loops) para automatizar el proceso de salida de una matriz.
Una vez que aprendas esta importante habilidad no tendrás que volver a escribir marcas HTML repetitivas.
Usar los bucles foreach en las matrices
El bucle estándar de WordPress es un bucle while, como en "mientras haya elementos para repetir continúa el bucle". A menudo, cuando se trabaja con metadatos, es más fácil trabajar con un bucle foreach.
Estos bucles nos permiten escribir nuestro PHP como si trabajáramos con una sola matriz, y luego, para cada elemento, hacer salir cada elemento de una matriz multidimensional a través del mismo bucle.
Antes hemos mirado este array:
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 |
);
|
Si quisiéramos que este array fuera legible, con el marcado adecuado, crearíamos un bucle foreach.
Normalmente establecemos bucles foreach con formas plurales y singulares de la variable, es decir, foreach ( $heroes como $hero ) y a partir de ahí podemos usar la variable singular para representar cada elemento de la matriz.
Entonces podemos tratar nuestra matriz multidimensional como una solo array.
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 |
);
|
18 |
|
19 |
echo '<ul>'; |
20 |
|
21 |
foreach ($heroes as $hero) { |
22 |
echo '<li>Full Name: '.$hero['full_name'].'</li>'; |
23 |
} //end of the foreach loop |
24 |
|
25 |
echo '</ul>'; |
Este es un ejemplo abstracto, pero estoy seguro de que puedes ver el poder. En lugar de reescribir (y tener que actualizar) el mismo marcado tres veces, solo lo escribes una vez, y dejas que PHP lo repita tres veces.
Estas seis simples líneas de código podrían manejar tan fácilmente cincuenta puestos como cinco, mostrándonos el poder de los bucles foreach para escribir un código fácil de manejar y escalable.
En el siguiente ejemplo, tomamos una matriz de post ids, y el post foreach devuelve el nombre de un campo youtube_name como un enlace que se establece en el campo youtube_link. Estas seis simples líneas de código podrían manejar tan fácilmente cincuenta posts como cinco, mostrándonos el poder de los bucles foreach para escribir código fácil de manejar y escalable.
1 |
$posts = array( 5, 8, 13, 21, 34 ); |
2 |
foreach ( $posts as $post ) { |
3 |
$link = get_post_meta( $post, 'youtube_link', 'single' ); |
4 |
$name = get_post_meta( $post, 'youtube_name', 'single' ); |
5 |
echo '<a href="'.$link.'">'.$name.'</a>'; |
6 |
} // end foreach loop |
Usando get_post_meta() en el bucle principal de WordPress
Hasta ahora he estado especificando manualmente los ID de los post, pero cuando se usan en el bucle principal de WordPress podemos establecer el ID en get_post_meta() manualmente con get_the_ID(). Así que usando los mismos campos personalizados que usamos en el último ejemplo, pero mostrándolos como parte del bucle principal, si quisiéramos añadir el vídeo de Youtube debajo del contenido del post, podríamos simplemente añadir, después, the_content(); algo así:
1 |
$link = get_post_meta( get_the_ID(), 'youtube_link', 'single' ); |
2 |
$name = get_post_meta( get_the_ID(), 'youttube_name', 'single' ); |
3 |
echo '<a href="' . $link . '">' . $name . '</a>'; |
Combinando un while y un bucle foreach
A menudo tendremos un campo personalizado que contiene una serie de datos serializados para información relacionada. Por ejemplo, un campo puede contener el título, el tipo de mímica, la URL y la descripción de un vídeo.
El almacenamiento en serie es especialmente útil cuando se pueden añadir varios elementos a un campo. Trabajar con estos tiempos de campos puede ser difícil en los principales bucles de WordPress. La forma más fácil de manejarlos es con un bucle secundario dentro del bucle principal.
En este ejemplo, he añadido a un bucle de post estándar de WordPress, que es un bucle de tiempo, un segundo bucle, que hace un bucle a través de cada campo de vídeo para construir un reproductor de vídeo HTML5, un vídeo foreach.
No importa si hay un video o diez. Estas pocas y simples líneas de código crearán un reproductor para cada uno.
1 |
if ( have_posts() { |
2 |
while ( have_posts() ) { |
3 |
the_post(); |
4 |
the_content(); |
5 |
$videos = get_post_meta( get_the_ID(), 'videos', false ); |
6 |
foreach ( $videos as $video ) { ?> |
7 |
<div class="video"> |
8 |
<h3 class="video-title"></h3> |
9 |
<video width="320" height="240" controls="controls"><source src="<?php echo $video['url']>" type="<?php echo $video['mime_type']; ?>" /> |
10 |
Sorry your browser does not support HTML5 video. |
11 |
</video>
|
12 |
<?php echo $video['description'] ?> |
13 |
</div>
|
14 |
<?php
|
15 |
} //endforeach |
16 |
} //endwhile |
17 |
} //endif |
Ya casi está
A través de esta serie, hasta ahora, hemos cubierto lo que son los metadatos en WordPress y hemos aplicado este conocimiento para aprender sobre los arrays y bucles PHP. También hemos visto algunos ejemplos prácticos sobre cómo usar estos datos, o matrices de datos en el bucle.
Este es el primer paso para aprender a usar WordPress como sistema de gestión de contenidos. El siguiente paso es aprender a consultar la base de datos por metacampos, que es lo que cubriremos la próxima vez.



