5

I hope I can explain it properly so here we go!

I have a property listing page that should be ordered by the date a listing was posted (data comes form an API so it's not the WP post date) and then any sold properties should be last in the list ordered by when they were sold with the most recently sold appearing first in that sub list. The first custom field is called listing_date and the other is agreed_date.

Does anyone know if this kind of ordering is possible? I was thinking I might need to use 2 queries but that would mean I wouldn't be able to use pagination with that solution. Here's my most recent failed attempt.

        <?php

       $args = array(
        'post_type' => 'listing',
        'posts_per_page' => 10,
        'paged' => $paged,
        'tax_query' => array(
            array(
                'taxonomy' => 'listingcategory',
                'field'    => 'slug',
                'terms'    => 'commercial',
            ),
        ),
        'orderby' => array(
            'agreed_date' => 'ASC',
            'listing_date' => 'DESC'
        ),      
       );
       $listing_posts = new WP_Query($args);

Thanks!

Updated code:

   $args = array(
    'post_type' => 'listing',
    'posts_per_page' => 10,
        'paged' => $paged,
        'tax_query' => array(
            array(
                'taxonomy' => 'listingcategory',
                'field'    => 'slug',
                'terms'    => 'commercial',
            ),
        'meta_query' => array(
            'relation' => 'AND',
            'listing_date_clause' => array(
                'key' => 'listing_date',
                'compare' => 'EXISTS',
            ),
            'agreed_date_clause' => array(
                'key' => 'agreed_date',
                'compare' => 'EXISTS',
            ), 
        ),
            ),
            'orderby' => array(
                'listing_date_clause' => 'DESC',
                'agreed_date_clause' => 'DESC'
            ),      
       );
5

According to https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters you want to specify it similar to the following code example:

$args = array(  
     'orderby' => array( 
        'title' => 'DESC', 
        'menu_order' => 'ASC' 
    ) 
); 
$query = new WP_Query( $args );

This is supported from WordPress 4.0.

For custom fields (post meta) you will need an added meta query, as detailed on https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query

E.g:

$q = new WP_Query( array(
'meta_query' => array(
    'relation' => 'AND',
    'state_clause' => array(
        'key' => 'state',
        'value' => 'Wisconsin',
    ),
    'city_clause' => array(
        'key' => 'city',
        'compare' => 'EXISTS',
    ), 
),
'orderby' => 'city_clause',
) );

This is supported since 4.2.

In your case (edited from your question) I think you would need:

$args = array(
    'post_type' => 'listing',
    'posts_per_page' => 10,
    'paged' => $paged,
    'tax_query' => array(
        array(
            'taxonomy' => 'listingcategory',
            'field'    => 'slug',
            'terms'    => 'commercial',
        )
    ),
    'meta_query' => array(
        'relation' => 'AND',
        'listing_date_clause' => array(
            'key' => 'listing_date',
            'compare' => 'EXISTS',
        ),
        'agreed_date_clause' => array(
            'key' => 'agreed_date',
            'compare' => 'EXISTS',
        ), 
    ),
    'orderby' => array(
        'listing_date_clause' => 'DESC',
        'agreed_date_clause' => 'DESC'
    ),      
);
  • Cheers! I've updated my question with code based on your suggestion. I'm not seeing any change in the ordering, I don't think the orderby array is doing anything for me. – Barry Walsh May 16 '16 at 12:18
  • Your edit shows the meta query nested in the tax query, I think these should be separate arrays. I've added the corrected query to my answer (from what I think, untested). – Pim Schaaf May 16 '16 at 12:46
  • 1
    Yep that was it, doh! Thanks for your help, that works and I really appreciate it! – Barry Walsh May 19 '16 at 8:28
  • Welcome! Happy to help. – Pim Schaaf May 19 '16 at 8:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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