Loop personalizzato WordPress, articoli non nello stesso ordine dell'Array

2 gen 2023, 11:55:16
Visualizzazioni: 36
Voti: 0

Sto lavorando a un sito di notizie che ha una sezione superiore con otto articoli in evidenza. Uso i campi ACF per questi articoli in evidenza e inserisco il loro ID. Ecco come appare il loop:

$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 standard per $kiemelt1
   }
   
   if ($i == 2) { 
       //HTML standard per $kiemelt2
   }
   
   .... ecc.

Ora, questo popola la sezione correttamente e funziona per la maggior parte, ma il problema sorge quando aggiorno l'array tramite la pagina delle opzioni.

Esempio:

Scambio l'ID in $kiemelt1 e $kiemelt2. Gli articoli vengono caricati, ma l'ordine non viene aggiornato. Perché può succedere questo?

Cosa ho provato:

Ho provato a cambiare il condizionale in modo che oltre a $i essere un numero specifico, verifico anche l'ID:

if ($i == 1 && get_the_id($kiemelt1) ) { } per esempio, ma questo causa la rottura del layout.

Grazie!

2
Commenti

Quindi sono riuscito a risolvere questo problema creando 8 loop separati, ma non sono sicuro del perché fosse necessario. Ho creato l'array $kiemeltek, quindi pensavo che il loop avrebbe attraversato: $kiemeltek[0], $kiemeltek[1], $kiemeltek[2] ecc. Ma non è così, ci sarebbe stato un modo migliore per farlo invece di query separate?

Pbalazs89 Pbalazs89
2 gen 2023 14:47:05

assegna l'ordine nel tuo $args.

rudtek rudtek
2 gen 2023 17:44:47
Tutte le risposte alla domanda 1
0

Come documentato, se stai utilizzando post__in per interrogare un elenco specifico di post e desideri che i risultati vengano restituiti nello stesso ordine, devi impostare orderby su post__in:

$args = array(
    'posts_per_page' => 8,
    'post__in'       => $kiemeltek,
    'orderby'        => 'post__in',
);
3 gen 2023 05:47:52