get_post aleatorio y orderby no funcionan

23 mar 2011, 09:46:45
Vistas: 63.9K
Votos: 11

Tengo este código que devuelve una lista de títulos de posts como enlaces, pero cuando agrego los parámetros 'orderby' y 'order' - devuelve resultados pero 'orderby, order, rand' no funcionan, ¿alguien puede decirme qué estoy haciendo mal? ¡Gracias!

<ul>
   <?php $post; $cat_posts = get_posts(array('numberposts' => 10, 'orderby' => 'rand', 'order' => ASC, 'category' => $disciplineCatID));
   foreach($cat_posts as $post) : ?>
   <?php $postTitle = get_the_title(); if($title != $postTitle) :?>
   <li><a href="<?php the_permalink(); ?>">&rsaquo;&rsaquo; <?php the_title(); ?></a></li>
   <?php endif ;?>
   <?php endforeach; ?>
</ul>
3
Comentarios

Faltan comillas simples en el ASC... ¿es solo un error tipográfico o posiblemente está relacionado?

t31os t31os
23 mar 2011 12:49:12

¿Podrías ser más específico sobre qué no funciona (por ejemplo, ¿tu código no devuelve ningún resultado o...)?

Manzabar Manzabar
23 mar 2011 14:55:23

@t31los, probé las comillas - gracias pero sigue sin funcionar. @Manzabar - gracias - he actualizado la información. Se devuelven resultados pero 'order, orderby, rand' no tienen efecto. Gracias.

User User
23 mar 2011 15:43:21
Todas las respuestas a la pregunta 7
3
22

Sí, esta es la sintaxis correcta:

$args = array(
    'orderby' => 'rand',
    'order'    => 'ASC'
);
query_posts( $args );

Sin embargo, los plugins pueden evitar que esto funcione correctamente. Intenta desactivar TODOS los plugins y ver si eso ayuda. Dos plugins conocidos que evitan que orderby=rand funcione son Post Type Order y WP_Sticky.

Además, si tienes Post Types Order instalado, asegúrate de visitar la página de Administración y revisar la configuración. Puedes usar este plugin y evitar que reordene automáticamente las publicaciones:

http://img829.imageshack.us/img829/2616/pictureot.png

Luego puedes usar el código para Post Types Order para ordenar específicamente esas publicaciones en los lugares donde necesites que estén ordenadas mediante el orden personalizado/menú. Aquí está el código de ejemplo para ese plugin:

El siguiente código PHP aún devolverá la publicación en el Orden configurado:

$args = array(
'post_type' => 'feature'
);

$my_query = new WP_Query($args);
while ($my_query->have_posts())
{
$my_query->the_post();
(..tu código..)          
}

O:

$posts = get_posts($args);
foreach ($posts as $post)
{
(..tu código..)     
}

Si el "Auto Sort" está desmarcado, necesitarás usar los parámetros "orderby" y "order":

$args = array(
'post_type' => 'feature',
'orderby'   => 'menu_order',
'order'     => 'ASC'
);
22 oct 2011 02:12:15
Comentarios

Gracias por el aviso. ¡"Intuitive Custom Posts Order" definitivamente causa este problema!

Mr_Chimp Mr_Chimp
25 ago 2015 13:53:31

Esto era extrañamente específico y correcto. Post Types Order lo causó. ¡Gracias!

Allen Gingrich Allen Gingrich
10 nov 2016 22:53:59

No estoy usando ese plugin, pero muchos de los ejemplos en wordpress.org usan "sort_order" en lugar de "order", lo cual no funcionó, mientras que esto sí lo hace. Gracias.

dw1 dw1
9 mar 2017 09:51:49
3

Si estás alojado en WP Engine, necesitas habilitar manualmente el orden aleatorio en tus ajustes o de lo contrario 'orderby' => 'rand' no funcionará.

https://wpexplorer-themes.com/total/docs/random-order-wpengine/

20 feb 2020 17:55:56
Comentarios

gracias, ese me ayudó.

M Haseeb M Haseeb
29 abr 2020 23:19:32

Después de al menos una hora de frustración... ¡¡GRACIAS!!

KVDD KVDD
26 may 2021 08:03:45

¡Gracias, gracias, gracias! Estoy seguro de que me ahorraste una o dos horas.

Shane McCurdy Shane McCurdy
27 jul 2021 06:39:11
1

¿Por qué no intentas usar query_posts en su lugar?

Algo como:

$args = array(
    'orderby' => 'rand',
    'order'    => 'ASC'
);
query_posts( $args );
23 mar 2011 16:02:36
Comentarios

Gracias a todos por su ayuda, que tonto fui - estaba en conflicto con el plugin 'Post Type Order' (Ordenar objetos de tipos de publicación usando una capacidad de arrastrar y soltar con javascript)

User User
25 mar 2011 11:18:07
0

prueba este código

<?php 
   remove_all_filters('posts_orderby');
   query_posts('orderby=rand'); 
?>

obtuve la respuesta de aquí

http://www.reinaris.nl/wp/wordpress-random-post-order-not-working-orderbyrand/

28 nov 2011 19:06:22
0

Probablemente olvidaste usar setup_postdata dentro de tu bucle foreach para que las etiquetas de plantilla funcionen.

28 nov 2011 19:10:51
0

Me encontré con el mismo problema y, por suerte, encontré este hilo. Probé una solución diferente, probablemente más sucia que las demás, pero que podría ser útil en algunos casos.

Básicamente, mezclé las publicaciones antes de mostrarlas:

<?php 
    $selectedPosts = get_posts($args);
    shuffle($selectedPosts);

    foreach ($selectedPosts as $selectedPost) : 
    setup_postdata( $selectedPost );
?>

<!-- elementos de la publicación aquí -->

<?php 
    endforeach;
    wp_reset_postdata();
?>
9 ene 2016 16:54:35
0

Si tienes wp-engine en tu sitio WordPress, verifica la opción ALLOW ORDER BY RAND(). Consulta un artículo aquí: https://wpengine.co.uk/support/about-order-by-rand/

3 ene 2019 12:27:09