Buclă personalizată WordPress - articolele nu sunt în aceeași ordine ca în Array

2 ian. 2023, 11:55:16
Vizualizări: 36
Voturi: 0

Lucrez la un site de știri care are o secțiune superioară cu opt articole recomandate. Folosesc câmpuri ACF pentru aceste articole recomandate și introduc ID-ul lor. Iată cum arată bucla:

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

Acest cod populează secțiunea corect și funcționează în mare parte, dar problema apare când actualizez array-ul prin pagina de opțiuni.

Exemplu:

Schimb ID-ul în $kiemelt1 și $kiemelt2. Articolele se încarcă, dar ordinea nu se actualizează. De ce se poate întâmpla acest lucru?

Ce am încercat:

Am încercat să modific condiționalul astfel încât pe lângă verificarea lui $i pentru un număr specific, să verific și ID-ul:

if ($i == 1 && get_the_id($kiemelt1) ) { } de exemplu, dar acest lucru cauzează întreruperea layout-ului.

Mulțumesc!

2
Comentarii

Așa că am reușit să rezolv această problemă prin crearea a 8 bucle separate, dar nu sunt sigur de ce a fost necesar acest lucru. Am creat array-ul $kiemeltek, așa că m-aș fi așteptat ca bucla să parcurgă: $kiemeltek[0], $kiemeltek[1], $kiemeltek[2] etc. Dar nu se întâmplă așa, ar fi existat o metodă mai bună de a face asta decât interogări separate?

Pbalazs89 Pbalazs89
2 ian. 2023 14:47:05

atribuie ordinea în $args.

rudtek rudtek
2 ian. 2023 17:44:47
Toate răspunsurile la întrebare 1
0

După cum este documentat, dacă utilizați post__in pentru a interoga o listă specifică de articole și doriți ca rezultatele să fie returnate în aceeași ordine, trebuie să setați orderby la post__in:

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