1

我正在尝试寻找一种按元值排序类别的方法。从我读到的,似乎我可以使用:

get_categories('child_of=92&hide_empty=false&orderby=meta_value&meta_key=date&order=ASC');

但是,这根本不起作用,类别仍然不是我想要的顺序。我想知道我怎么能:

  1. 更正它以使其正常工作
  2. 打印出 sql 看看里面到底发生了什么?

非常感谢您提前。

4

2 回答 2

1

首先,我必须提到我正在使用模块自定义类别字段,其次我是一个完整的 WP 新手

无论如何,在得知默认情况下无法做到这一点后,我查看了 get_categories 函数并最终想出了一个解决方案

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('child_of=92&hide_empty=false&orderby=category_custom_field&category_custom_field=date&order=DESC');

非常感谢任何更正!

于 2012-04-27T18:08:16.653 回答
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");
于 2012-08-07T20:14:52.633 回答