Como você usa orderby com meta_query no Wordpress 3.1?

21

É possível solicitar minha lista de postagens personalizadas, depois de filtrá-la com meta_query, pelos metadados de minha escolha?

Por exemplo, eu tenho um tipo de postagem personalizado chamado webinars. Estou tentando listar todos os próximos webinars e solicitá-los pelo meta campo personalizado chamado webinar_startDate.

Usando a consulta a seguir, consegui retornar os seminários on-line, excluindo com êxito os seminários on-line antigos. No entanto, eles ainda saem na ordem em que foram publicados, e não pelo webinar_startDate.

<?php $my_array =  array(
    'meta_query' => array(
            array(
                'key' => 'webinar_startDate',
                'value' => date("Y-m-d H:i:s"),
                'compare' => '>=',
                'type' => 'DATETIME'
            )
    ),
    'orderby' => 'meta_value',
    'post_type' => 'webinars',
    'posts_per_page' => 20,
    'order' => 'ASC'
); ?>

Eu suspeito que, devido à alteração de 3.0 para 3.1, o uso de orderby => meta_value provavelmente seja diferente, mas não consigo encontrar uma resposta na documentação do WordPress para explicar isso.

Alguém pode ajudar? Desde já, obrigado.

Jeff K.
fonte

Respostas:

17

a nova meta_querymatriz seleciona quais postagens a consulta retorna. Então, sim, você está indicando a 'chave' dentro disso meta_query, mas ainda pode usar o antigo método de

'orderby' => 'meta_value', 
'meta_key' => '_events_meta',

além da meta_query, pois essas linhas indicam como classificar a consulta resultante. Então, sim, você pode indicar a mesma meta_key duas vezes.

somático
fonte
9
Esta resposta não está completamente certa. Se você adicionar um orderby e uma meta_key fora de uma meta_query existente, o resultado será realmente classificado pela chave fornecida - mas também incluirá qualquer publicação em que essa meta chave esteja definida, mesmo que o valor não atenda aos critérios na meta_query (pelo menos, foi assim que funcionou para mim nos testes). Uma maneira melhor de fazer isso poderia ser a de passar um array como o param orderby, como descrito aqui: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath
1

Estou usando o código a seguir para minhas postagens personalizadas chamadas events, para obter todas as postagens em um loop.

$evtLoop = new WP_Query(array('post_type' => 'events',
                              'posts_per_page' => 10,
                              'orderby' => 'meta_value', 
                              'meta_key' => '_events_meta',
                              'order'=>'DESC'));

Eu acho que você está usando seu código aproximadamente da mesma maneira. Eu acho que você está perdendo o meta_keycom o nome do meta-campo para classificar. Talvez ajude se você adicionar

'meta_key' => 'webinar_startDate',

para a matriz externa?

Guru 2.0
fonte
Eu vejo agora. Fiquei confuso com a documentação do Wordpress que dizia 'meta_key' e 'meta_value' foram depreciados. Eu assumi que isso significava que eu não poderia usá-los, mas acho que isso era enganador. Obrigado!
Jeff K.