簡體   English   中英

Wordpress get_categories() 按“term_order”排序?

[英]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 對它們進行排序/過濾。

幾年后,我找到了這個解決方案:

該任務可以通過過濾器和經過調整的分類法來解決。

https://core.trac.wordpress.org/ticket/5857#comment:4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM