posso ordenar por um campo personalizado e meta_query outro na mesma consulta

4

Eu tenho uma consulta personalizada e estou filtrando eventos por campo personalizado: evento-mês. Eu simples filtrar nossos eventos que não têm um month_number = to date ("n");

É uma ótima e pequena consulta, mas preciso ordenar por outro campo personalizado, event_date.

Preciso de uma função personalizada ou algo para fazer isso. Eu simplesmente quero orderby = > event_date

mas atualmente estou usando o mês do evento para minha consulta.

<?php 
        $event_query = new WP_Query(
        array( 
          'post_type'   => 'event',        // only query events
          'meta_key'    => 'event-month',  // load up the event_date meta
          'order_by'    => '',
          'order'       => 'asc',         // ascending, so earlier events first
          'meta_query'  => array(
             array(         // restrict posts based on meta values
              'key'     => 'event-month',  // which meta to query
              'value'   => date("n"),  // value for comparison
              'compare' => '=',          // method of comparison
              'type'    => 'NUMERIC'         // datatype, we don't want to compare the string values
            ) // meta_query is an array of query ites
           ) // end meta_query array
          ) // end array
        ); // close WP_Query constructor call

? >

    
por tjsherrill 08.03.2011 / 00:40

3 respostas

5

Apesar de o meta_key ter sido descontinuado, ainda é necessário fazer com que o orderby funcione corretamente.

Antes de mais nada, existe um erro com o seu código, e isso está em usar order_by e não orderby (não há sublinhado na ordem by arg).

Dê uma chance e veja como isso funciona para você.

$event_query = new WP_Query( array( 
    'post_type'   => 'event',
    'meta_key'    => 'event-month',
    'meta_query'  => array(
        array( 
            'key'     => 'event-month',
            'value'   => date("n"),
            'compare' => '=',
            'type'    => 'NUMERIC'
        )
    ),
    'orderby'    => 'meta_value',
    'order'       => 'asc', 
) );

Se você deseja adicionar uma segunda meta-chave e classificar por essa chave, apenas certifique-se de que a chave esteja dentro de meta_key arg, por exemplo.

$event_query = new WP_Query( array( 
    'post_type'   => 'event',
    'meta_key'    => 'some-key',
    'meta_query'  => array(
        array( 
            'key'     => 'some-key',
            'value'   => 'whatever',
            'compare' => '=',
            'type'    => 'NUMERIC'
        ),
        array( 
            'key'     => 'event-month',
            'value'   => date("n"),
            'compare' => '=',
            'type'    => 'NUMERIC'
        )
    ),
    'orderby'    => 'meta_value',
    'order'       => 'asc', 
) );

É estranho que você precise de meta_key para o tipo, mas não vejo a orderby sendo respeitada sem ela, posso ver como a consulta aparece dentro de guia de consultas da barra de depuração e, até onde eu sei, meta_key é atualmente necessário para obter uma classificação apropriada em meta_value .

    
por t31os 08.03.2011 / 11:42
0

Descobri que a resposta do t31os funciona, mas somente se incluída com:

 'posts_per_page'   => -1,

no $ args ...

Não incluindo coisas estranhas como remover registros que deveriam estar no conjunto de resultados.

    
por gvanto 20.10.2016 / 05:50
-1

Remova 'meta_key' dos parâmetros. Não funciona no WP 3.1

    
por Marcin 08.03.2011 / 06:41