Wordpress 3.1에서 meta_query와 함께 orderby를 어떻게 사용합니까?


21

meta_query로 필터링 한 후 선택한 메타 데이터로 내 맞춤 게시물 목록을 주문할 수 있습니까?

예를 들어 웹 세미나라는 사용자 지정 게시물 유형이 있습니다. 예정된 모든 웨비나를 나열하려고하고 webinar_startDate라는 사용자 정의 메타 필드를 기준으로 정렬하려고합니다.

다음 쿼리를 사용하여 이전 웹 세미나를 제외하고 웹 세미나를 성공적으로 반환 할 수있었습니다. 그러나 여전히 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'
); ?>

3.0에서 3.1로 변경했기 때문에 orderby => meta_value의 사용이 다를 수 있지만 WordPress 설명서에서이를 설명하는 답변을 찾을 수 없습니다.

누구든지 도울 수 있습니까? 미리 감사드립니다.

답변:


17

meta_query배열은 쿼리가 반환하는 게시물을 선택합니다. 예, 당신은 그 안에 '키'를 표시하고 meta_query있지만 여전히 이전 방법을 사용할 수 있습니다

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

이러한 행은 결과 쿼리 를 정렬 하는 방법을 나타 내기 때문에 meta_query 외에도 . 예, 동일한 meta_key를 두 번 표시 할 수 있습니다.


9
이 답변은 완전하지 않습니다. 기존 meta_query 외부에 orderby와 meta_key를 추가하면 결과는 제공된 키를 기준으로 정렬되지만 값이 기준을 충족하지 않더라도 해당 메타 키가 설정된 게시물을 포함합니다. meta_query에서 (적어도 그것이 테스트에서 나를 위해 일한 방법입니다). 이를 수행하는 더 좋은 방법은 다음에 설명 된대로 배열을 orderby param으로 전달하는 것입니다. core.trac.wordpress.org/ticket/17065#comment:14
MathSmath

1

events루프에서 모든 게시물을 가져 오기 위해 이라는 사용자 정의 게시물에 다음 코드를 사용하고 있습니다.

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

나는 당신이 거의 같은 방식으로 코드를 사용하고 있다고 생각합니다. meta_key정렬 할 메타 필드 이름 이없는 것으로 생각합니다 . 추가하면 도움이 될 것입니다.

'meta_key' => 'webinar_startDate',

외부 배열로?


나는 지금 본다. 'meta_key'와 'meta_value'가 감가 상각되었다는 Wordpress 설명서에 혼란 스러웠습니다. 나는 그것을 사용할 수 없다고 생각했지만 오해의 소지가 있다고 생각합니다. 감사!
Jeff K.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.