【问题标题】:Wordpress get_categories() order by "term_order"?Wordpress get_categories() 按“term_order”排序?
【发布时间】:2013-03-05 20:14:48
【问题描述】:

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

【问题讨论】:

  • 你上面的代码不起作用,因为get_categories不接受带有'orderby'键的'term_order'值,使用term_order背后的原因是什么?

标签: php wordpress


【解决方案1】:

多年以后,

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

【讨论】:

    【解决方案2】:

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

    “订单子句”中的未知列“term_order”。

    因为简单来说,某些词条查询仅从 (wp_terms & wp_term_taxonomy) 数据库表中获取数据,并且没有任何具有 term_order 字段的 INNER JOIN 和 (wp_term_relationships) 表。因此出现错误消息。

    只有在查询关注分类法和对象之间的多对多关系时才应添加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 );
    

    【讨论】:

      【解决方案3】:

      我搜索了所有的 wordpress 功能,唯一可以与'term_order' 一起使用的是wp_get_object_terms,您可以看到它的功能here

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

      【讨论】:

        【解决方案4】:

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

        可以使用过滤器和经过调整的分类来解决该任务。

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

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-18
        相关资源
        最近更新 更多