1

カテゴリをメタ値で並べ替える方法を探しています。私が読んだことから、使用できるようです:

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

ただし、これはまったく機能しません。カテゴリはまだ希望どおりの順序ではありません。どうすればいいのだろうか:

  1. これを修正して機能させます
  2. 内部で実際に何が起こっているかを確認するには、SQL を出力しますか?

事前にどうもありがとうございました。

4

2 に答える 2

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 に答える
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 に答える