2017-05-05 111 views
1

我爲媒體附件創建了一個名爲'attach_cats'的自定義分類標準。分類中的每個術語都有自定義術語元數據,其中包含'term_order'鍵和整數元值。我在「edit-tag.php」頁面添加了一個自定義列,顯示「term_order」的值。按自定義元數據對自定義分類標準進行排序(pre_get_terms)

現在我想命令'orderby'的術語'term_order'的值。我做這一切的時候了「edit.php post_type =頁?」具有以下功能:

add_action('pre_get_posts', 'sort_by_meta_key'); 
function sort_by_meta_key($query){ 
    global $pagenow; 
    if(is_admin() 
     && 'edit.php' == $pagenow 
     && isset($_GET['post_type']) && $_GET['post_type']=='gallery'){ 
     $query->set('meta_key', 'gallery_pos'); 
     $query->set('orderby', 'meta_value_num'); 
     $query->set('order', 'ASC'); 
    } 
} 

但是,當我嘗試用「術語」來做到這一點,而不是「上崗」使用「pre_get_terms」它不起作用。這裏是我有:

add_action('pre_get_terms', 'term_sort_order'); 
function term_sort_order($query){ 
    global $pagenow; 
    if(is_admin() 
     && 'edit-tags.php' == $pagenow 
     && isset($_GET['post_type']) && $_GET['post_type']=='attachment'){ 
     $query->set('meta_key', 'term_order'); 
     $query->set('orderby', 'meta_value_num'); 
     $query->set('order', 'ASC'); 
    } 
} 

// THIS RETURNS: Fatal error: Call to undefined method WP_Term_Query::set() ...... 

任何幫助將不勝感激。

回答

0

試試這個:

https://pastebin.com/vr2sCKzX

public function pre_get_terms($query) { 
    $meta_query_args = array(
     'relation' => 'AND', // Optional, defaults to "AND" 
     array(
      'key'  => 'order_index', 
      'value' => 0, 
      'compare' => '>=' 
     ) 
    ); 
    $meta_query = new WP_Meta_Query($meta_query_args); 
    $query->meta_query = $meta_query; 
    $query->orderby = 'position_clause'; 
} 
+0

你必須對pre_get_terms有一個動作,然後在上面的回調函數中進行嘗試。爲我工作。解決方案來了這個鏈接的評論:https://core.trac.wordpress.org/ticket/34996 eherman24的評論 –

+0

感謝您的答覆,即使已經6個月,我還沒有做從那時起該項目的其他任何東西(這是我正在構建的一個個人插件)......我明天會回到它並嘗試這個......謝謝。 – Jeremy

0

對我來說,我做了一個自定義分類,並在自定義分類我有一個自定義元。我希望在管理員後端有一列,並使其可排序。爲自定義分類中的自定義分類做出可排序的工作,我這樣做了。

https://pastebin.com/vr2sCKzX

public function pre_get_terms($query) { 
$meta_query_args = array(
    'relation' => 'AND', // Optional, defaults to "AND" 
    array(
     'key'  => 'order_index', 
     'value' => 0, 
     'compare' => '>=' 
    ) 
); 
$meta_query = new WP_Meta_Query($meta_query_args); 
$query->meta_query = $meta_query; 
$query->orderby = 'position_clause'; 

} 我發現這個鏈接的回答https://core.trac.wordpress.org/ticket/34996

我不得不通過以適應在評論中給出了答案@ eherman24

只是不忘記添加操作鉤pre_get_terms,然後使用上面提供的回調。

相關問題