WP_Query con una matriz de ID ordenada por matriz

2 minutos de lectura

avatar de usuario
Ehsan

Tengo una serie de ID y quiero obtener esas publicaciones por WP_Quey()

$myarray = $ids;
$args = array( 'post__in' => $myarray);
// The Query
$the_query = new WP_Query( $args );

Es, Ordenar resultado por fecha Pero quiero ordenarlo por elementos de $myarray y el primer resultado sería el primer ID en $myarray

  • Tu pregunta no es muy clara. Pero si desea ordenar las publicaciones por ID en su matriz, puede usar orderby=>’ID’. Aquí está la matriz de argumentos. $args = array( ‘post__in’ => $myarray, ‘orderby’=>ID, ‘order’=>’ASC’);

    – Pranita

    7 de marzo de 2014 a las 6:00


En WordPress 3.5 y versiones posteriores, puede usar 'orderby'=>'post__in' entonces debes escribir esto:

$myarray = $ids;    
$args = array('post__in'=> $myarray, 'orderby'=>'post__in');
// The Query
$the_query = new WP_Query( $args );

  • Pero, ¿qué sucede si desea incluir todas las identificaciones, no solo publicar__in?

    –Tim Hallman

    14 de febrero de 2020 a las 17:25

Sé que mi respuesta es demasiado tarde, pero tengo que responder correctamente.

como lo intenté 'orderby'=>'post__in':

por ejemplo, tengo cookies actualizadas dinámicamente, y debo cargar productos en el bloque de productos vistos recientemente en orden, ese primer producto en este bloque debe ser visto por última vez.

ESTÁ BIEN.

tenía identificaciones 1720, 19626, 19173, 19188.

$args = array('post__in'=> $myarray, 'orderby'=>'post__in');

Esta cadena en la salida devolvió mis productos en orden:

19626, 19188, 19173, 1720 y no es mi orden. Esta causa simplemente ordena el parámetro DESC por defecto WP_Query. Y solo tenemos otra oportunidad – ASC es… muy triste respuesta de M H.

Mi respuesta es simplemente inteligente:

NO NECESITAMOS ‘ordenar’=>’publicar__en’

tenemos que conseguir:

$myarray = $ids;    
$args = array('post__in'=> $myarray);
$the_query = new WP_Query( $args );

Después hacemos:

foreach($myarray as $myarray_id){
 while ( $the_query->have_posts()) {
   $the_query->the_post();
   if($post->ID == $myarray_id){
     //DO SOMETHING
   }
 }
}

¡Eso es todo!

  • Esta respuesta parece sugerir que la respuesta anterior de MH, simplemente usar ‘orderby’ => ‘post__in’ no funciona. Sin embargo, para mí eso funciona bien, y creo que es una solución más fácil para ser honesto. Tal vez me estoy perdiendo algo o tal vez el comportamiento cambió en WordPress mientras tanto, pero puedo confirmar que ‘orderby’ => ‘post__in’ funciona bien para ordenar por los identificadores seleccionados en el orden en que los enumero en la matriz, nada más parece necesario.

    – GoldyOnline

    24 de junio de 2021 a las 11:17

avatar de usuario
ilegítimo

Transmitiendo correctamente la orden:

$id_array = array(5,2,3,7);

foreach($id_array as $id_array_v)
{
   $query = new WP_Query(array('post__in' => array($id_array_v)));

   while($query -> have_posts())
   {
      $query -> the_post();
      the_title();
   }
}

  • ¿Podrías explicar qué hace tu código? Considere revisar para evitar la eliminación. (equipo de revisión)

    – www139

    30/03/2018 a las 21:25

  • transmitir correctamente la orden

    – ilegítimo

    31 de marzo de 2018 a las 12:10

¿Ha sido útil esta solución?