5

根据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);
4

4 回答 4

2

许多年后,

您可以在您的 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参数。

于 2018-08-30T10:21:20.857 回答
1

@cédric-dagherir-dahive 的答案建议使用get_terms_orderby过滤器是一种按照添加到对象(帖子)的顺序显示术语的好方法。但是,它不适用于所有术语查询,并且会生成以下错误:

'order 子句' 中的未知列 'term_order'。

因为简单来说,某些术语查询只是从 ( wp_terms& wp_term_taxonomy) 数据库表中获取数据,而没有任何带有字段的INNER JOINwith ( wp_term_relationships) 表term_order。因此出现错误消息。

order by term_order仅当查询涉及分类和对象之间的多对多关系时才应添加该子句(例如get_the_terms)。

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 );
于 2020-03-05T11:41:33.090 回答
0

我搜索了所有的 wordpress 函数,唯一可以使用的'term_order'wp_get_object_terms ,你可以在这里看到它的函数。

从这一点开始,即使 wordpress 不使用它来过滤get_categories()您或其他主题/插件开发人员中的类别,也可以使用上述函数来获取 object_terms 并按 term_order 对其进行排序/过滤。

于 2013-10-09T08:56:12.273 回答
0

几年后,我找到了这个解决方案:

该任务可以通过过滤器和适应的分类法来解决。

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

于 2021-11-13T15:11:18.373 回答