Forums

Display/Rotate latest post from different categories using orderby=rand (5 posts)

  1. alexcastro
    Member
    Posted 3 years ago #

    Hi.

    I've been trying to find a way to display the latest post from 3 different categories and randomize them so when the user refreshes the page they will get a different, recent post. In my searches, I came across this code (http://codex.wordpress.org/Function_Reference/wpdb_Class):

    Using the OBJECT output_type, get the 5 most recent posts in Categories 3,20, and 21 and display the permalink title to each post. (example works at WordPress Version 2.2.1)
    
    <?php
    $querystr ="
      SELECT $wpdb->posts.* FROM $wpdb->posts
      LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id)
      WHERE $wpdb->posts.post_status = 'publish'
      AND $wpdb->posts.post_type = 'post'
      AND $wpdb->post2cat.category_id IN (3,20,21)
      ORDER BY $wpdb->posts.post_date DESC
      LIMIT 5";
    $pageposts = $wpdb->get_results($querystr, OBJECT);
    ?>
    <?php if ($pageposts): ?>
      <?php foreach ($pageposts as $post): ?>
        <?php setup_postdata($post); ?>
        <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
             <?php the_title(); ?></a></h2>
      <?php endforeach; ?>
      <?php else : ?>
        <h2> Not Found</h2>
    <?php endif; ?>

    That would be perfect because I could set the limit to 1 and ORDER BY rand(), except that it doesn't seem to work in WordPress 2.7 (example works at WordPress Version 2.2.1).

    Right now I'm using this code which fetches 1 post, randomly, from the categories 6, 27 and 31 by the current year and month:

    <?php $temp_query = $wp_query; ?>
                        <?php $postMonth = date('m'); ?>
                        <?php $postYear = date('Y'); ?>
                        <?php query_posts('cat=31,27,6&showposts=1&orderby=rand&monthnum='.$postMonth.'&year='.$postYear); ?>
                        <?php while (have_posts()) : the_post(); ?>
                        <div>
                        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        </div>
                        <?php endwhile; ?>
                        <?php $wp_query = $temp_query; ?>

    That kinda works, but then there's the problem of older posts being displayed or when the month turns over and nothing new was posted.

    The code provided by Codex works fine, but old posts are displayed as well:

    <ul><li><h2>A random selection of my writing</h2>
        <ul>
     <?php
     $rand_posts = get_posts('numberposts=5&orderby=rand');
     foreach( $rand_posts as $post ) :
     ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
     <?php endforeach; ?>
        </ul>
     </li></ul>

    How to randomly display the latest post from 3 different categories in one placeholder?

    I really appreciate your help.

    Regards,

    Alex

  2. alexcastro
    Member
    Posted 3 years ago #

    Please don't let my thread fall into the obscurity of unsolved topics BUMP!

  3. Pete
    Member
    Posted 2 years ago #

    this is great

  4. Pete
    Member
    Posted 2 years ago #

    bump

  5. omnijh
    Member
    Posted 2 years ago #

    hey alexcastro
    did you manage to sort this out ??
    very very interesting topic and useful to most of us i reckon..

Topic Closed

This topic has been closed to new replies.

About this Topic