get_terms()orderby name不起作用 - wordpress

时间:2017-07-06 07:47:07

标签: php wordpress custom-taxonomy taxonomy-terms

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

7 个答案:

答案 0 :(得分:3)

您的代码应该可以正常运行。我有同样的问题,我发现我的插件中的一个钩子改变了' orderby'值。情况可能相同。
我建议你在插件/主题中寻找一个连接到get_terms()的过滤器函数。

可能的钩子:

  • terms_clauses
  • get_terms_orderby
  • get_terms_args

编辑:在您开始扫描挂钩之前,您应该尝试将'menu_order' => false添加到您的计算机中,它可能会为您完成任务。有分类法,手动拖放排序(menu_order),所以你只需要它就可以了。

答案 1 :(得分:1)

我刚刚在我的localhost上测试了你的代码,但它确实有效。

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

答案 2 :(得分:0)

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

def move_zeros(array):
# your code here
if len(array) < 1:
    return array
else:
    list = []
    zeros = 0

    for i in array:
        if not i and type(i) is int or type(i) is float:
            zeros += 1
        else:
            list.append(i)

for i in range(0, zeros):
    list.append(0)

return list

应该没有输出。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这里出现了同样的问题,就像其他人提到的那样,罪魁祸首是一个与分类学分类有关的插件。 Category Order and Taxonomy Terms Order,以我为例。我将其停用,我的条款列表按顺序弹出。

答案 5 :(得分: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
" );
?>

答案 6 :(得分: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);