6

我正在使用 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);
});
4

7 回答 7

10

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

于 2019-03-14T18:06:29.800 回答
4

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

可能的钩子:

  • terms_clauses
  • get_terms_orderby
  • 获取术语参数

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

于 2017-10-22T09:18:06.800 回答
3

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

                    'orderby'           => 'name', 
                    'order'             => 'ASC',
                    'hide_empty'        => false, 
                    'fields'            => 'all', 
                    'parent'            => 0,
                    'hierarchical'      => true, 
                    'child_of'          => 0,
                    'childless'         => false,
                    'pad_counts'        => false, 
                    'cache_domain'      => 'core'
于 2017-07-06T09:21:40.327 回答
0

尝试使用 wpdb

<?php
global $wpdb;
$rs_terms = $wpdb->get_results( "
    SELECT
        t.*
    FROM
        {$wpdb->prefix}term_taxonomy AS tt
    INNER JOIN
        {$wpdb->prefix}terms AS t
        ON t.term_id = tt.term_id
    WHERE
        tt.taxonomy = 'tax-category'
        AND tt.parent = '0'
    ORDER BY
        t.name DESC
" );
?>
于 2021-05-28T18:42:02.140 回答
0

同样的问题,我确认 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);
于 2021-07-29T08:59:20.213 回答
0

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

php -m | grep -i apc

应该没有输出。

于 2018-03-28T01:34:05.907 回答
0

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

于 2019-01-16T09:37:23.677 回答