[英]Wordpress get_categories() order by "term_order"?
根據WordPress codex , get_categories() 方法為其 orderby 屬性接受以下參數:
**orderby** (string) Sort categories alphabetically or by unique category ID. The default is sort by Category ID. Valid values:
id
name - default
slug
count
term_group
但是,查看“wp_term_relationships”表,有一個看似未使用的字段,稱為“term_order”,對於我創建的每個類別,該字段都設置為 0。
是否可以使用 term_order 字段作為類別的索引排序順序?
我已為我的類別將增量值放入此字段,但我正在嘗試使用以下代碼將訂單傳遞給函數,但無濟於事:
$cat_args=array(
'hierarchical' => 0,
'orderby' => 'term_order',
);
$categories = get_categories($cat_args);
許多年后,
您可以在您的 functions.php 中添加此代碼:
function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
return $query_vars['orderby'] == 'term_order' ? 'term_order' : $orderby;
}
add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );
此代碼強制 WP 在您的術語查詢中使用orderby => term_order參數。
@cédric-dagherir-dahive 的答案表明使用get_terms_orderby
過濾器是一種很好的方法,可以按照它們被添加到對象(帖子)的順序來顯示術語。 但是,它不適用於所有術語查詢,並且會產生以下錯誤:
“訂單子句”中的未知列“term_order”。
因為簡單地說,某些術語查詢僅從 ( wp_terms
& wp_term_taxonomy
) 數據庫表中獲取數據,並且沒有任何具有term_order
字段的 ( wp_term_relationships
) 表的INNER JOIN
。 因此出現錯誤消息。
僅當查詢關注分類法和對象之間的多對多關系(例如get_the_terms
)時,才應添加order by term_order
子句。
因此,我更新了代碼以在將term_order
添加到 order 子句之前首先檢查 term 查詢是否涉及對象:
function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
return ( ! is_null($query_vars["object_ids"]) ) ? 'term_order' : $orderby;
}
add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );
我已經搜索了所有 wordpress 函數,唯一可以與'term_order'
一起使用'term_order'
是wp_get_object_terms ,您可以在此處查看它的函數。
從現在開始,即使 wordpress 不使用它來過濾get_categories()
的類別,您或其他主題/插件開發人員也可以使用上述函數來獲取 object_terms 並按 term_order 對它們進行排序/過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.