Ordenar e incluir array por IDs específicos de posts

12 sept 2011, 20:35:54
Vistas: 44K
Votos: 9

Tengo lo siguiente:

<?php $num_cols = 2; // establecer el número de columnas aquí


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

Pensé que simplemente poniendo los IDs de los posts, podría hacer que aparecieran los posts específicos, y solo esos posts. Desafortunadamente, ese no parece ser el caso. Así que me preguntaba si alguien sabía cómo puedo lograr esto.

¡Gracias de antemano!

0
Todas las respuestas a la pregunta 4
3
28
$args = array(
    'post_type' => 'testimonials',
    'posts_per_page' => 4,
    'orderby' => 'post__in', 
    'post__in' => array(883, 563, 568, 106)
); 

Al usar post__in dentro del valor de orderby se respetará el orden del array de IDs pasado en post__in

2 may 2013 22:42:48
Comentarios

¡Bienvenido a WPSE y a la red de SE, @stephenkeable! Formato excepcional y una respuesta sólida y concisa. Sigue con el buen trabajo ;)

bosco bosco
2 may 2013 23:24:08

Esto debería estar arriba, ya que leí primero el comentario de Milo y pensé que no podía ordenar fácilmente por post__in. Muy útil, muchas gracias

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

¡esta respuesta debería marcarse como correcta! La respuesta marcada actualmente ignora el orden del array... simplemente coincidió que el array de ejemplo estaba en el orden correcto... ¡Gracias por eso!

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

Utiliza la clave post__in en lugar de include para obtener publicaciones de IDs específicos.

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

Y para ordenar las publicaciones según los IDs de publicaciones proporcionados, puedes usar el siguiente arreglo.

$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
Comentarios

¡Gracias Milo! Logré que aparecieran las publicaciones específicas, pero no en ese orden en particular.

Nina Nina
12 sept 2011 22:03:40

@Nina - eso se debe al funcionamiento del motor de base de datos MySQL subyacente. La forma más sencilla de obtener el orden que deseas es iterar sobre tu arreglo de IDs, y para cada ID, recorrer las publicaciones para encontrar el resultado coincidente. Tu otra opción es más compleja y requiere modificar directamente la consulta SQL para que MySQL las obtenga en ese orden específico.

Milo Milo
12 sept 2011 22:10:16
1

para mí funciona eliminando los dos puntos "; " y reemplazando por una coma "," así:

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

Funcionó perfectamente :)

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

Puedes usarlo así... donde $localservicesselectlocalservices es el array de la tabla 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);

Esto te devuelve un array de posts en el mismo orden que $localservicesselectlocalservices

19 abr 2023 13:32:34