2012-04-27 3 views
1

메타 값으로 카테고리를 주문하는 방법을 찾고 있습니다. 내가 읽은 바로는 내가 사용할 수 있습니다처럼 보인다 :get_categories 메타 키 문제로 주문 하시겠습니까?

get_categories ('child_of = 92 & hide_empty = 거짓 & ORDERBY = meta_value & meta_key = 날짜 & 순서 = ASC를');

그러나이 방법은 전혀 작동하지 않지만 카테고리는 원하는 순서대로 정렬되지 않습니다.

  1. 올바른이 그것을 볼 수있는 SQL에서
  2. 인쇄를 작동하도록이 정말로 안쪽 것입니다 : 내가 할 수있는 방법을 궁금해?

대단히 감사합니다. 모든

+0

oops, 사이트에서 플러그인을 사용하고 있음을 알지 못했습니다. 카테고리 맞춤 입력란 (카테고리 맞춤 입력란을 임의의 맞춤법/분류에 추가). 자세한 내용은 다음을 확인해야합니다 – mr1031011

답변

1

우선은 내가 모듈 사용자 정의 범주 필드를 사용하고 언급해야하고, 모든 초 나는이 기본적으로 수행 할 수 없음을 학습 한 후,

어쨌든 완전한 WP 초보자에게있어 솔루션

function category_custom_field_get_terms_orderby($orderby, $args){ 
    if($args['orderby'] == 'category_custom_field' && isset($args['category_custom_field'])) 
     return 'cv.field_value'; 
    return $orderby; 
} 

function category_custom_field_get_terms_fields($selects, $args){ 
    if($args['orderby'] == 'category_custom_field' && isset($args['category_custom_field'])) 
     $selects[] = 'cv.*'; 
    return $selects; 
} 

function category_custom_field_terms_clauses($pieces, $taxonomies, $args){ 
    global $wpdb; 
    if($args['orderby'] == 'category_custom_field' && isset($args['category_custom_field'])) 
     $pieces['join'] .= " LEFT JOIN $wpdb->prefix" . "ccf_Value cv ON cv.term_id = tt.term_id AND cv.field_name = '".$args['category_custom_field']."'"; 
    return $pieces; 
}  

add_filter('get_terms_orderby', 'category_custom_field_get_terms_orderby',1,2); 

add_filter('get_terms_fields', 'category_custom_field_get_terms_fields',1,2); 

add_filter('terms_clauses', 'category_custom_field_terms_clauses',1,3); 

(코드는 위의 테마 functions.php 파일에 넣어 수 있습니다) 다음

범주를 얻을 수있는 코드를 내놓았다 마지막으로 get_categories 기능으로 보면서 것은 :

,
get_categories('child_of=92&hide_empty=false&orderby=category_custom_field&category_custom_field=date&order=DESC'); 

모든 수정에 큰 감사드립니다!

+0

플러그인의 확장 기능을 기본값과 병합하는 데 필터를 사용하는 것이 좋습니다. 카테고리 사용자 정의 필드를 직접 사용한 적이 없지만 모든 것이 구문 상 정확하고 최적으로 보입니다. – maiorano84

1

get_categories 새 메타를 지정하고 usort을 사용하여 정렬 할 수도 있습니다.

$subcategories = get_categories(); 

foreach ($subcategories as $subcategory) { 
$subcategory->your_meta_key = your_meta_value; 
} 

foreach ($subcategories as $subcategory) { 
blah blah blah 
} 

function my_cmp($a, $b) { 
if ($a->ordering == $b->ordering) { 
return 0; 
} 
return ($a->ordering < $b->ordering) ? -1 : 1; 
} 


usort($subcategories, "my_cmp"); 
관련 문제