Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm trying to use the orderby and custom WP_Query features of wordpress. It works nicely to select item by their meta and to order by date.

Unfortunately, it seems that I could not get the post result ordered by a meta_value numeric.

Here is the args for the query :

$args = array(
                'post_status' => 'publish',
                'post_type' => 'participant',
                'order' => 'DESC',
                'meta_key' => 'participant_partage_class',
                'order_by' => 'meta_value_num,
                'meta_query' => array(
                             'key' => 'participant_partage_class',
                             'type' => 'SIGNED',
                             'compare' => '>',
                        ),
                'posts_per_page' => '8',
                'paged' => $paged
            );

This result in the following query (token via request $GLOBALS['wp_query']->request) :

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'participant' AND (wp_posts.post_status = 'publish') AND (wp_postmeta.meta_key = 'participant_partage_class' ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 8, 8

Which can not gave the list in order by meta_value.

What I've seen is that this query :

SELECT wp_posts.*
FROM wp_posts 
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE 1=1
  AND wp_posts.post_type = 'participant'
  AND (wp_posts.post_status = 'publish')
  AND wp_postmeta.meta_key = 'participant_partage_class'
GROUP BY wp_posts.ID
ORDER BY CAST(wp_postmeta.meta_value AS SIGNED) DESC
LIMIT 0, 8;

So my question is, how to handle this by simply using WP_Query object and not the default MySQL approach?

share|improve this question
3  
order_by is not a valid argument, it's orderby. also you're missing a closing quote on meta_value_num, I assume that's a typo. –  Milo May 30 '13 at 1:09

1 Answer 1

The problem in your code is 'meta_query' code is write insde array of array

$args = array(
                'post_status' => 'publish',
                'post_type' => 'participant',
                'order' => 'DESC',
                'meta_key' => 'participant_partage_class',
                'order_by' => 'meta_value_num,
                'meta_query' => array(array(
                             'key' => 'participant_partage_class',
                             'type' => 'SIGNED',
                             'compare' => '>',
                        )),
                'posts_per_page' => '8',
                'paged' => $paged
            );
$query = new WP_Query($args);

http://codex.wordpress.org/Class_Reference/WP_Query

you can check here how to use 'meta_query' in wp_query

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.