andy
andy

Reputation: 2754

wp_query by last month + sort posts

I'm using the WordPress plugin 'I recommend this', it allows people to 'like' posts. The value is stored as a meta key, which we can query to generate a 'most recommended' page.

Plugin -> http://wordpress.org/support/plugin/i-recommend-this

The loop.

<?php 
        query_posts('&orderby=meta_value&meta_key=_recommended');
        if (have_posts()): while (have_posts()) : the_post();
    ?>
        <article <?php post_class('item-post block'); ?> id="post-<?php the_ID(); ?>">


         <h2><?php the_title(); ?></h2>
        </article>


    <?php endwhile; ?>
    <?php endif; ?>

This works, it finds the most recommended posts.

Two questions.

  1. How do I limit the posts returned to a date range of say, the last 3 months?

  2. In a similar vein, how could I then have a button for 'Most popular this week' that'd allow users to see a filtered result of posts from the last 7 days?

Upvotes: 0

Views: 2209

Answers (2)

andy
andy

Reputation: 2754

I worked it out. Used a custom filter along with WP_query array.

<?php 

                // Create a new filtering function that will add our where clause to the query
                function filter_where( $where = '' ) {
                    // posts in the last 30 days
                    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-180 days')) . "'";
                    return $where;
                }

                add_filter( 'posts_where', 'filter_where' );

                $featuredPosts = new WP_Query( array(

                'meta_key'=>'_recommended',  
                'orderby' => 'meta_value_num', 
                'order' => DESC
                ) ); 


                remove_filter( 'posts_where', 'filter_where' ); ?>


                <?php if ( $featuredPosts->have_posts() ) : ?>



                <?php while ( $featuredPosts->have_posts() ) : $featuredPosts->the_post(); ?>

                <article <?php post_class('item-post block'); ?> id="post-<?php the_ID(); ?>">

                <div class="figure">
                <?php the_post_thumbnail('frontthumb'); ?>
                </div>

            <div class="fig-cover">

                <div class="fig-bottom">
                        <div class="title-container">


                          <?php if ( get_post_meta($post->ID, 'Price', true) ) { ?>

                               <div class="price-container">

                                    <?php echo get_post_meta($post->ID, "Price", true); ?>

                               </div>
                               <h2 class="price-title"><?php the_title(); ?> </h2>





                                <?php } else { ?>
                                 <h2><?php the_title(); ?> </h2>
                                <?php } ?>




                    </div> <!-- end div title-container -->
                </div>

            </div>

            <div class="reco">
            <?php if( function_exists('dot_irecommendthis') ) dot_irecommendthis(); ?>
            </div>

            <a class="the-post-link" href="<?php the_permalink(); ?> ">


            </a>
            </article> <!-- end div post -->



                <?php endwhile; wp_reset_query(); ?>


                <?php endif; ?>

Now I just need to figure out how to do live filter on-site...

Upvotes: 0

espnicholas
espnicholas

Reputation: 538

You could try something like this, this is just a basic example:

$today = getdate();
$threemonths = $today["mon"]-3;

$args = array(
    'date_query' => array(
        array(
            'after'     => array(
                'year'  => $today["year"],
                'month' => $threemonths,
                'day'   => $today["mday"],
            ),
            'before'    => array(
                'year'  => $today["year"],
                'month' => $today["mon"],
                'day'   => $today["mday"],
            ),
            'inclusive' => true,
        ),
    ),
    'posts_per_page' => -1,
);
$query = new WP_Query( $args );

They break it down further in the wordpress documentation:

http://codex.wordpress.org/Function_Reference/query_posts http://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

Upvotes: 1

Related Questions