9

I have this code that returns list of post title as links, but when I add the 'orderby' and 'order' parameters - it returns results but 'orderby, order, rand' do not work, can anyone tell me what I'm doing wrong? Thanks!

<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
  • 1
    Missing single quotes on the ASC.. just a typo or possibly related?
    – t31os
    Mar 23 '11 at 10:49
  • Could you be more specific on what's not working (e.g. does your code not return any results or ...)?
    – Manzabar
    Mar 23 '11 at 12:55
  • @t31los, tried the quotes - thanks but still no luck. @Manzabar - thank you - I've updated the information. Results are returned 'order, orderby, rand' do not take effect. Thanks you.
    – user3907
    Mar 23 '11 at 13:43
20

Yes, this is the correct syntax:

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

However plugins can keep this from working properly. Try disabling ALL plugins and see if that helps. Two known plugins which keep orderby=rand from working are Post Type Order and WP_Sticky

Also, if you have Post Types order installed make sure you visit the Admin page and check the settings. You can use this plugin and keep it from automatically re-ordering posts:

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

And then you can use the code for Post Types Order to specifically order those posts in places where you need them to be ordered via the custom/menu-order. Here is the example code for that plugin:

The following PHP code will still return the post in the set-up Order:

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

$my_query = new WP_Query($args);
while ($my_query->have_posts())
{
$my_query->the_post();
(..your code..)          
}

Or:

$posts = get_posts($args);
foreach ($posts as $post)
{
(..your code..)     
}

If the Auto Sort is uncheck you will need to use the "orderby" and "order" parameters:

$args = array(
'post_type' => 'feature',
'orderby'   => 'menu_order',
'order'     => 'ASC'
);
3
  • Thanks for the heads-up. "Intuitive Custom Posts Order" definitely causes this problem!
    – Mr_Chimp
    Aug 25 '15 at 10:53
  • 1
    This was oddly specific and right. Post Types Order did it. Thanks! Nov 10 '16 at 20:53
  • I'm not using that plugin, but many of the examples on wordpress.org use "sort_order" instead of "order", which didn't work, whereas this does. Thanks.
    – dw1
    Mar 9 '17 at 7:51
6

If you're hosted on WP Engine, you need to manually enable random ordering in your settings or else 'orderby' => 'rand' won't work.

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

3
  • thanks that one helped.
    – M Haseeb
    Apr 29 '20 at 20:19
  • After at least an hour of frustration ... THANK YOU!!
    – KVDD
    May 26 at 5:03
  • Thank you, thank you, thank you! I am sure you saved me an hour or two! Jul 27 at 3:39
1

Why don't you try to use query_posts instead?

Something like:

$args = array(
    'orderby' => 'rand',
    'order'    => 'ASC'
);
query_posts( $args );
1
  • 2
    Thank you all for your help, silly me - it was conflicting with a plugin 'Post Type Order' (Order Post Types Objects using a Drag and Drop Sortable javascript capability)
    – user3907
    Mar 25 '11 at 9:18
0

try this code

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

got the answer from here

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

0

You probably forgot to setup_postdata inside your foreach loop to get template tags to work.

0

I ran into the same problem, and luckily found this thread. I tried a different fix, probably dirtier than the others, but maybe useful in some cases.

Basically, I shuffled the posts before outputting them:

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

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

<!-- post elements here -->

<?php 
    endforeach;
    wp_reset_postdata();
?>
0

If you have wp-engine in your WordPress site check the ALLOW ORDER BY RAND() option. See an article here: https://wpengine.co.uk/support/about-order-by-rand/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy