Ordonare și includere array după ID-uri specifice de postări

12 sept. 2011, 20:35:54
Vizualizări: 44K
Voturi: 9

Am următorul cod:

<?php $num_cols = 2; // setează numărul de coloane aici


            $args = array(
                    'post_type' => 'testimonials',
                    'posts_per_page' => 4,
                    'orderby' => 'ID', 
                    'include' => '883, 563, 568, 106',                                  
                    'order' => ''           

                    ); 
            query_posts($args);
            if (have_posts()) :
            for ( $i=1 ; $i <= $num_cols; $i++ ) :
            echo '<div id="col-'.$i.'" class="col">';
            $counter = $num_cols + 1 - $i;
            while (have_posts()) : the_post();

            if( $counter%$num_cols == 0 ) : ?>
                <div id="box">

                <?php the_post_thumbnail('post-thumbnail', array('title' => '', 'alt' => '')); ?>



                <?php the_excerpt();?>
                </div>
                <?php endif; $counter++;
                  endwhile;
                  echo '</div>'; 
                  endfor;
                  endif; 
                wp_reset_query(); 
                ?>

Am crezut că simpla adăugare a ID-urilor postărilor va face ca acele postări specifice să apară, și doar acelea. Din păcate, nu pare să fie cazul. Așa că mă întrebam dacă știe cineva cum pot realiza acest lucru.

Mulțumesc anticipat!

0
Toate răspunsurile la întrebare 4
3
28
$args = array(
    'post_type' => 'testimoniale',
    'posts_per_page' => 4,
    'orderby' => 'post__in', 
    'post__in' => array(883, 563, 568, 106)
); 

Folosind post__in în cadrul valorii orderby se va respecta ordinea array-ului de ID-uri transmis în post__in

2 mai 2013 22:42:48
Comentarii

Bine ați venit la WPSE și la rețeaua SE, @stephenkeable! Formatare excepțională și un răspuns solid, concis. Continuați cu treaba bună ;)

bosco bosco
2 mai 2013 23:24:08

Acesta ar trebui să fie în top, deoarece am citit mai întâi comentariul lui Milo și am crezut că nu pot sorta ușor după post__in. Foarte util, mulțumesc mult

Matthias S Matthias S
15 nov. 2016 19:41:25

acest răspuns ar trebui marcat ca corect! Răspunsul actual bifat va ignora ordinea array-ului... doar s-a întâmplat ca array-ul exemplu să fie în ordinea corectă... Mulțumesc pentru asta!

Sergei Zahharenko Sergei Zahharenko
10 nov. 2017 13:42:41
2
22

folosește cheia post__in în loc de include pentru a obține postări din anumite ID-uri de postări.

$args = array(
    'post_type' => 'testimonials',
    'posts_per_page' => 4,
    'orderby' => 'ID', 
    'post__in' => array(883, 563, 568, 106),
); 

Și pentru a ordona postările după ID-urile date, poți folosi următorul array.

$args = array(
       'post_type' => 'testimonials',
       'posts_per_page' => 4,
      'orderby' => 'post__in', 
      'post__in' => array(883, 563, 568, 106),
   );
12 sept. 2011 21:14:56
Comentarii

Mulțumesc, Milo! Am reușit să fac postările specifice să apară, dar nu în ordinea respectivă.

Nina Nina
12 sept. 2011 22:03:40

@Nina - asta se întâmplă din cauza modului în care funcționează motorul de bază de date MySQL. cea mai simplă metodă pentru a obține ordinea dorită este să parcurgi array-ul cu ID-uri și, pentru fiecare ID, să parcurgi postările pentru a găsi rezultatul potrivit. cealaltă opțiune este mai complexă și necesită modificarea directă a interogării SQL pentru a forța MySQL să le returneze în ordinea specifică.

Milo Milo
12 sept. 2011 22:10:16
1

pentru mine funcționează prin eliminarea punctului și virgulei "; " și înlocuirea cu o virgulă "," astfel:

                   'orderby' => 'post__in',
                   'post__in' => array(185, 157, 163),
14 dec. 2016 18:41:22
Comentarii

A funcționat perfect :)

hemnath mouli hemnath mouli
14 ian. 2017 15:56:58
0

Puteți utiliza astfel... unde $localservicesselectlocalservices este array-ul din tabelul wp_postmeta

$localservicesselectlocalservices = get_post_meta($post_id, 'local_services_select_local_services', true);
$args = array(
    'post_type'     => array($post_type),
    'post_status'   => array('publish'),
    'post__in' => $localservicesselectlocalservices,
    'orderby' => 'post__in'
    
);
$query = new WP_Query($args);

Aceasta vă returnează un array de postări în aceeași ordine ca $localservicesselectlocalservices

19 apr. 2023 13:32:34