I’m trying to order WP_Query posts by an ACF Custom Field.
I’ve been looking at the link below…
https://www.advancedcustomfields.com/resources/orde-posts-by-custom-fields/
Based on that information, I’d be looking at something like this…
$args = array(
'numberposts' => -1,
'post_type' => 'cars',
'meta_key' => 'price',
'orderby' => 'meta_value',
'order' => 'DESC'
'posts_per_page' => 12,
'paged' => $paged
);
My issue is that I’m already using the Meta Key to filter out Sold Cars.
$args = array(
'numberposts' => -1,
'post_type' => 'cars',
'meta_key' => 'sold',
'meta_value' => '0',
'orderby' => $orderBy,
'order' => $order,
'posts_per_page' => 12,
'paged' => $paged
);
Would anyone be able to point me in the right direction as to how I could combine the two?
You need to use a meta_query
instead of meta_key
and meta_value
See this https://developer.wordpress.org/reference/classes/wp_query/#custom-field-post-meta-parameters and also see the last code example in the order & orderby parameters section https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters about ordering using meta query clauses.
Many thanks for your reply… I will look into this asap and let you know how I get on. It might be a job for Wednesday now though. 🙁
Thanks again for your help…
I can’t say I had a good understanding of the information on that page, but I’ve managed to solve my problem.
$args = array(
'numberposts' => -1,
'post_type' => 'cars',
'meta_query' => array(
'state_clause' => array(
'key' => 'sold',
'value' => '0'
)
),
'meta_key' => 'price',
'orderby' => 'meta_value',
'order' => 'ASC',
'posts_per_page' => 12,
'paged' => $paged
);
As you can see, I’ve used the meta_query to filter out the sold vehicles, allowing me to use the meta_key to order the results.
I’ve got a bit of a glitch going on though…
Any prices starting with 1 are at the beginning and any starting with 9 are at the end etc.
This has resulted in £30,000 cars being next to £300,000 cars.
I’ve checked the type for the Price field and it’s “number”.
Am I missing something simple or should I have done the ordering via meta_query as well?