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' => 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 为自定义分类返回空数组