我正在使用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);
});
答案 0 :(得分:3)
您的代码应该可以正常运行。我有同样的问题,我发现我的插件中的一个钩子改变了' orderby'值。情况可能相同。
我建议你在插件/主题中寻找一个连接到get_terms()的过滤器函数。
可能的钩子:
编辑:在您开始扫描挂钩之前,您应该尝试将'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);