user537137
user537137

Reputation: 614

Ordering Wordpress posts with meta values

I have this code below that basically creates 4 links to allow me to sort posts on the front end.

<div class="sort">
    Sort projects by:
    <a href="http://example.com/find-work/" >Latest Projects</a>
    <a href="http://example.com/find-work/?order=asc&orderby=date" >Ending Soon</a>
    <a href="http://example.com/find-work/?order=asc&orderby=meta_value_num&meta_key=proj_budget" >Budget Low</a>
    <a href="http://example.com/find-work/?order=desc&orderby=meta_value_num&meta_key=proj_budget" >Budget High</a>
</div>

<?php   
    $my_query = new WP_Query( array( 
                'post_type' => 'project',
                'orderby' => get_query_var('orderby'),
                'order' => get_query_var('order'),
                ));      
    while ( $my_query->have_posts() ) : $my_query->the_post(); 
?>

The second link, ordering by date works fine but the two links to order by meta values is not working. I am obviously missing something in my query but for the life of me can't work it out.

Any ideas??

Upvotes: 6

Views: 35625

Answers (2)

Erik van de Ven
Erik van de Ven

Reputation: 4975

It's quite simple:

new WP_Query( array( 
              //I used meta_value_num below, because it's about a numeric field
              //if you don't have a numeric field, just use meta_value
              "orderby" => 'meta_value_num',
              "meta_key" => 'price',
              "order" => 'DESC'
              ));

Upvotes: 8

Jure C.
Jure C.

Reputation: 3080

It's a bit magical with meta values:

$my_query = new WP_Query( array( 
                    // 'post_type' => 'project',
                    'meta_key' => 'proj_budget',
                    'orderby' => 'meta_value_num'
                    ));      

All the possible values are explained in codex: http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

Upvotes: 9

Related Questions