Bucle personalizado en WordPress, artículos no aparecen en el mismo orden que el Array

2 ene 2023, 11:55:16
Vistas: 36
Votos: 0

Estoy trabajando en un sitio de noticias que tiene una sección superior con ocho artículos destacados. Uso campos ACF para estos artículos destacados e ingreso sus IDs. Así es como se ve el bucle:

$kiemelt1 = get_field('kiemelt_1', 'option');
$kiemelt2 = get_field('kiemelt_2', 'option');
$kiemelt3 = get_field('kiemelt_3', 'option');
$kiemelt4 = get_field('kiemelt_4', 'option');
$kiemelt5 = get_field('kiemelt_5', 'option');
$kiemelt6 = get_field('kiemelt_6', 'option');
$kiemelt7 = get_field('kiemelt_7', 'option');
$kiemelt8 = get_field('kiemelt_8', 'option');

$kiemeltek = array($kiemelt1, $kiemelt2, $kiemelt3, $kiemelt4, $kiemelt5, $kiemelt6, $kiemelt7, $kiemelt8);

$args = array(
    'posts_per_page' => 8,
    'post__in' => $kiemeltek,
);
$wp_query = new WP_Query( $args );

if (have_posts()) {
    $i = 0;
    while ( have_posts() ) {
        the_post();
        $i++;

   if ($i == 1) { 
       //HTML estándar para $kiemelt1
   }
   
   if ($i == 2) { 
       //HTML estándar para $kiemelt2
   }
   
   .... etc.

Esto llena la sección correctamente y funciona en su mayoría, pero el problema surge cuando actualizo el array a través de la página de opciones.

Ejemplo:

Intercambio los IDs en $kiemelt1 y $kiemelt2. Los artículos se cargan, pero el orden no se actualiza. ¿Por qué puede ocurrir esto?

Lo que intenté:

Intenté cambiar el condicional para que, además de que $i sea un número específico, también verifique el ID:

if ($i == 1 && get_the_id($kiemelt1) ) { } por ejemplo, pero esto rompe el diseño.

¡Gracias!

2
Comentarios

Así que logré solucionar este problema creando 8 bucles separados, pero no estoy seguro de por qué fue necesario. Creé el array $kiemeltek, así que pensaría que el bucle pasaría por: $kiemeltek[0], $kiemeltek[1], $kiemeltek[2], etc. Pero no lo hace, ¿habría habido una mejor manera de hacer esto que consultas separadas?

Pbalazs89 Pbalazs89
2 ene 2023 14:47:05

asigna el orden en tus $args.

rudtek rudtek
2 ene 2023 17:44:47
Todas las respuestas a la pregunta 1
0

Como está documentado, si estás usando post__in para consultar una lista específica de publicaciones y deseas que los resultados se devuelvan en el mismo orden, necesitas establecer orderby como post__in:

$args = array(
    'posts_per_page' => 8,       // Número de publicaciones a mostrar
    'post__in'       => $kiemeltek,  // IDs de las publicaciones destacadas
    'orderby'        => 'post__in',  // Ordenar según el orden de los IDs proporcionados
);
3 ene 2023 05:47:52