get_terms() orderby name 不起作用 - wordpress

Posted

技术标签:

【中文标题】get_terms() orderby name 不起作用 - wordpress【英文标题】:get_terms() orderby name is not working - wordpress 【发布时间】:2017-12-10 02:22:30 【问题描述】:

我正在使用 wordpress,希望按名称对一级分类术语进行排序,但下面的代码没有给我想要的结果。这是我的代码:

$args = array(
    'taxonomy' => 'tax-category', 
    'hide_empty' => 0,
    'hierarchical' => 1,
    'parent' => 0,
    'orderby'=>'name',
    'order' => 'DESC',
    'fields' => 'all',
);
$rs_terms = get_terms('tax-category', $args);

当我在 php 排序下添加时,它工作得很好。但是想知道为什么wordpress的默认排序不能正常工作:

usort($rs_terms, function($a, $b)
    return strcmp($a->name, $b->name);
);

【问题讨论】:

你试过'order' => 'ASC',而不是DESC? 是同样的错误结果@Ashkar 嗨,它对我有用。 这是对我有用的代码, 'category', 'hide_empty' => 0, 'hierarchical' => 1, 'parent ' => 0, 'orderby'=>'name', 'order' => 'ASC', 'fields' => 'all', ); $rs_terms = get_terms('类别', $args); echo '
',print_r($rs_terms,1),'
'; ?>
我刚刚尝试输入您的代码,但它仍然以错误的方式排序类别名称(即 D、B 但应该是 B、D)@Ashkar 【参考方案1】:

同样的问题,我确认 Cory 提到的内容,类别顺序和分类术语顺序确实改变了搜索顺序。我可以使用下面的代码解决我的请求删除插件过滤器的问题。

remove_filter('terms_clauses', 'TO_apply_order_filter', 10, 3);

//do your stuff here...

add_filter('terms_clauses', 'TO_apply_order_filter', 10, 3);

【讨论】:

【参考方案2】:

用 wpdb 试试

<?php
global $wpdb;
$rs_terms = $wpdb->get_results( "
    SELECT
        t.*
    FROM
        $wpdb->prefixterm_taxonomy AS tt
    INNER JOIN
        $wpdb->prefixterms AS t
        ON t.term_id = tt.term_id
    WHERE
        tt.taxonomy = 'tax-category'
        AND tt.parent = '0'
    ORDER BY
        t.name DESC
" );
?>

【讨论】:

【参考方案3】:

在这里出现了同样的问题,就像其他人提到的那样,罪魁祸首是一个与分类排序相关的插件。 Category Order and Taxonomy Terms Order,就我而言。我停用了它,我的条款列表突然出现。

【讨论】:

这也是我的问题。希望有一种方法可以在不卸载插件的情况下覆盖它。打开关于此问题的支持票:wordpress.org/support/topic/order-terms-by-count 根据这个问题,只需将 'ignore_term_order' => true 添加到您的数组中。为我工作。 您也可以在插件设置页面中关闭“自动排序”。 谢谢!天啊...数小时的搜索一下子就丢失了【参考方案4】:

我遇到了同样的问题。我正在使用插件 Intuitive Custom Post Order,它通过在 WordPress 管理面板中拖放来进行排序。这在 get_terms() 中覆盖了我的“orderby”,所以我从管理面板更改了排序。如果您使用任何类似的插件,它可能会覆盖“orderby”。

【讨论】:

【参考方案5】:

您也可以检查您安装的 PHP 模块。假设您使用的是 PHP 7.x,请确保没有加载 APC 或 APCu 模块。

php -m | grep -i apc

应该没有输出。

【讨论】:

【参考方案6】:

您的代码应该可以正常工作。我遇到了同样的问题,我在插件中发现了一个改变“orderby”值的钩子。可能是同样的情况。 我建议你在你的插件/主题中寻找一个与 get_terms() 挂钩的过滤器函数。

可能的钩子:

terms_clauses get_terms_orderby get_terms_args

编辑:在您扫描钩子之前,您应该尝试将'menu_order' =&gt; false 添加到您的参数中,它可能会为您完成这项工作。有手动拖放排序(menu_order)的分类法,所以你只需要禁用它。

【讨论】:

【参考方案7】:

我刚刚在我的本地主机上测试了你的代码,它可以工作。

                    'orderby'           => 'name', 
                    'order'             => 'ASC',
                    'hide_empty'        => false, 
                    'fields'            => 'all', 
                    'parent'            => 0,
                    'hierarchical'      => true, 
                    'child_of'          => 0,
                    'childless'         => false,
                    'pad_counts'        => false, 
                    'cache_domain'      => 'core'

【讨论】:

以上是关于get_terms() orderby name 不起作用 - wordpress的主要内容,如果未能解决你的问题,请参考以下文章

php 将post_type添加到get_terms args

如何在涉及多个get_terms()的WordPress函数中返回多个值

Wordpress get_terms 为自定义分类返回空数组

linq 实现动态 orderby

AngularJS在模板中使用orderBy ng-repeat值的全局变量

C# list.Orderby 降序