Ordinare e includere array per specifici ID di post

12 set 2011, 20:35:54
Visualizzazioni: 44K
Voti: 9

Ho il seguente codice:

<?php $num_cols = 2; // imposta qui il numero di colonne


            $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(); 
                ?>

Pensavo che semplicemente inserendo gli ID dei post, avrei potuto far apparire i post specifici, e solo quelli. Sfortunatamente, non sembra essere questo il caso. Quindi mi chiedevo se qualcuno sapesse come posso ottenere questo risultato.

Grazie in anticipo!

0
Tutte le risposte alla domanda 4
3
28
$args = array(
    'post_type' => 'testimonianze',
    'posts_per_page' => 4,
    'orderby' => 'post__in', 
    'post__in' => array(883, 563, 568, 106)
); 

Utilizzando post__in come valore per orderby rispetterà l'ordine dell'array di ID passati in post__in

2 mag 2013 22:42:48
Commenti

Benvenuto su WPSE e nella rete SE, @stephenkeable! Formattazione eccezionale e una risposta solida e concisa. Continua così ;)

bosco bosco
2 mag 2013 23:24:08

Questa dovrebbe essere in cima, poiché ho letto prima il commento di Milo e pensavo di non poter ordinare facilmente per post__in. Molto utile, grazie mille

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

questa risposta dovrebbe essere segnata come corretta! La risposta attualmente selezionata ignora l'ordine dell'array... è solo un caso che l'array di esempio fosse già nell'ordine giusto... Grazie per questo!

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

Utilizza la chiave post__in invece di include per ottenere i post da specifici ID.

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

Per ordinare i post in base agli ID specificati, puoi utilizzare il seguente array.

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

Grazie Milo! Sono riuscito a far apparire i post specifici, ma non in quell'ordine preciso.

Nina Nina
12 set 2011 22:03:40

@Nina - questo dipende dal funzionamento del motore del database MySQL sottostante. Il modo più semplice per ottenere l'ordine desiderato è iterare sull'array di ID, e per ogni ID, scorrere i post per trovare il risultato corrispondente. L'altra opzione è più complessa e richiede di modificare direttamente la query SQL per fare in modo che MySQL li estragga in quell'ordine specifico.

Milo Milo
12 set 2011 22:10:16
1

per me funziona rimuovendo il punto e virgola "; " e sostituendolo con una virgola "," in questo modo:

                   'orderby' => 'post__in',
                   'post__in' => array(185, 157, 163),
14 dic 2016 18:41:22
Commenti

Ha funzionato perfettamente :)

hemnath mouli hemnath mouli
14 gen 2017 15:56:58
0

Puoi utilizzarlo in questo modo... dove $localservicesselectlocalservices è l'array dalla tabella 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);

Questo ti restituisce un array di post nello stesso ordine di $localservicesselectlocalservices

19 apr 2023 13:32:34