WP_Query orderby um campo personalizado e outro em uma consulta

4

Espero poder explicar isso corretamente, então vamos lá!

Eu tenho uma página de listagem de propriedades que deve ser ordenada na data em que uma listagem foi postada (dados vem de uma API, então não é a data de postagem do WP) e então todas as propriedades vendidas devem ser as últimas na lista. vendido com o mais recentemente vendido aparecendo primeiro nessa sub-lista. O primeiro campo personalizado é chamado listing_date e o outro é accord_date.

Alguém sabe se esse tipo de pedido é possível? Eu estava pensando em usar duas consultas, mas isso significaria que eu não seria capaz de usar a paginação com essa solução. Aqui está minha tentativa falhada mais recente.

        <?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);

Obrigado!

Código atualizado:

   $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'
            ),      
       );
    
por Barry Walsh 15.05.2016 / 22:49

1 resposta

5

De acordo com enlace , você deseja especificá-lo de maneira semelhante ao exemplo de código a seguir:

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

Isso é suportado pelo WordPress 4.0.

Para campos personalizados (post meta), você precisará de uma meta-consulta adicionada, conforme detalhado em enlace

Por exemplo:

$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',
) );

Isso é suportado desde 4.2.

No seu caso (editado a partir da sua pergunta), acho que você precisaria:

$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'
    ),      
);
    
por Pim Schaaf 15.05.2016 / 23:19

Tags