2012-10-01 2 views
6

글 표시 :여러 wordpress 사용자 정의 필드 값을 정렬하는 방법? '가격'사용자 정의 필드에 의해 지시 '제품'유형

또한 '크기'에 의해 주문하려면 사용해야합니까 코드
$query = new WP_Query( 
         array ('post_type' => 'product', 
           'orderby' => 'meta_value', 
           'meta_key' => 'price') 
        ); 

? 'Start_Minute'에 의해 다음 'START_HOUR'에 의해 주문 '이벤트'유형

디스플레이 게시물과 :

또 다른 예가있는 여러 개의 사용자 정의 필드에 정렬이 필요합니다. 당신은 조금 더 meta_query 항목으로 재생해야합니다

$params = array(
'post_type' => 'product', 
'meta_query' => array(
    array(
      'key' => 'price', 
      'value' => '', 
      'compare' => 'LIKE' 
    ), 
    array(
      'key' => 'size', 
      'value' => '', 
      'compare' => 'LIKE' 
    ) 
), 
'orderby' => 'price size', 
'order' => 'ASC' 
); 
$query = new WP_Query; 
$resulting_obj = $query->query($params); 

, 특히 '값'매개 변수 :

답변

7

덕분에 나는 해결책을 찾아 냈다.

나는 초기 솔루션을

return str_replace('wp_posts.menu_order', 'mt2.meta_value, mt1.meta_value', $orderby); 

덕분에

return str_replace('menu_order', 'mt2.meta_value, mt1.meta_value', $orderby); 

을 변경했다!

+0

처음 발견 된 번호 행이 쿼리되기 때문에 이것이 작동하지 않는 것 같습니다. 'SELECT SQL_CALC_FOUND_ROWS zmw_posts.ID FROM' –

1

는 여기에 내가 일을한다고 생각 하나 이상의 meta_key 및 ORDERBY를 사용하는 예입니다. '사용자 정의 필드 매개 변수'섹션에서 http://codex.wordpress.org/Class_Reference/WP_Query을 잘 보시기 바랍니다.

$args = array(
    'post_type'=>'Events', 
    'orderby' => 'menu_order', 
    'order' => 'ASC', 
    'meta_query' => array(
     array(
      'key' => 'Start_Hour', 
      'value' => '', 
      'compare' => 'LIKE' 
     ), 
     array(
      'key' => 'Start_Minute', 
      'value' => '', 
      'compare' => 'LIKE' 
     ) 
    ) 
); 

add_filter('posts_orderby','orderbyreplace'); 
$loop = new WP_Query($args); 
remove_filter('posts_orderby','orderbyreplace'); 
+0

이 게시물은 나를 위해 WP 4.5.3에서 작동했습니다. – KingRichard

2

function orderbyreplace($orderby) { 
    return str_replace('menu_order', 'mt1.meta_value, mt2.meta_value', $orderby); 
} 

하고 ... 나는이 워드 프레스 3.7에서 약간 변경 생각 : Bainternet

-1

사용자 정의 필드 중 하나가 meta_key이고 다른 하나가 테이블의 일반 열인 경우 쿼리에서 이러한 매개 변수/인수를 사용하는 것보다 여러 개의 사용자 정의 필드를 정렬하는 데 필터 또는 후크가 필요하지 않습니다.

'meta_key' => 'KEY_NAME', 
'orderby' => 'meta_value_num SECOND_COLUMN_NAME', 
'order' => 'ASC' or 'order' => 'DESC' 

여기 meta_value_numSECOND_COLUMN_NAME 물질의 순서는, 당신은 순서에 따라 다른-2 결과를 볼 수 있습니다.

+0

이것은 'KEY_NAME'에 의해서만 정렬됩니다. 이'orderby'가 작동하는 유일한 방법은'SECOND_COLUMN_NAME'이이 질문에 대답하지 않는 커스텀 필드가 아닌 경우입니다. – Dylan

관련 문제