Arrays 如何按特定顺序对get_terms()结果进行排序
我正在通过分配给变量的get_terms()的结果填充无序列表。我想做的是将结果按无序列表中的特定顺序排序。我该怎么做?我曾研究过在get_terms()函数中使用orderby参数,但没有一个参数像我需要的那样工作。我如何定义它们显示的特定顺序?基本上,我的无序列表在填充后如下所示:Arrays 如何按特定顺序对get_terms()结果进行排序,arrays,wordpress,sorting,Arrays,Wordpress,Sorting,我正在通过分配给变量的get_terms()的结果填充无序列表。我想做的是将结果按无序列表中的特定顺序排序。我该怎么做?我曾研究过在get_terms()函数中使用orderby参数,但没有一个参数像我需要的那样工作。我如何定义它们显示的特定顺序?基本上,我的无序列表在填充后如下所示: 亚特兰蒂斯 社区 公司的 保健 高等教育 k-12 我希望它看起来像这样: k-12 高等教育 保健 亚特兰蒂斯 公司的 社区 最好的选择是为get\u terms编写一个包装函数,然后使用usort()按
- 亚特兰蒂斯
- 社区
- 公司的
- 保健
- 高等教育
- k-12
- k-12
- 高等教育
- 保健
- 亚特兰蒂斯
- 公司的
- 社区
get\u terms
编写一个包装函数,然后使用usort()
按您想要的顺序对术语进行排序
下面是代码,我对代码进行了注释,使其易于理解和理解(注意:此代码需要PHP5.4+)
该函数有四个参数
这是从中获取术语的分类法。默认值:空字符串$taxonomy
这是可以传递给$args
的所有有效参数。你可以退房。默认值:空数组get\u terms
术语的slug或名称或ID,按您希望的特定顺序排序。这可以是一个slug/names/id数组,也可以是一个以逗号分隔的slug/names/id字符串。默认空字符串 例子$term\u order
这将按照术语3、术语1、术语2的顺序显示术语string: $term_order = 'term-3, term-1, term-2'; array: $term_order = ['term-3', 'term-1', 'term-2'];
术语必须按哪个字段排序。默认值是slug,这意味着您应该将字符串或术语slug数组传递给$sort_by
参数。如果需要将术语名称传递给$term\u order
参数,则需要将$term\u order
的值设置为$sort\u by
。如果愿意,您还可以将术语id传递给name
,在这种情况下,您需要将$term\u order
值设置为$sort\u by
术语id
category
,我们不想设置任何特定参数,我们需要按名称按以下顺序对术语进行排序术语C、术语A、术语B
然后您将执行以下操作:($term\u order
作为数组)
($term\u order
作为字符串)
我在设置客户想要的顺序时发现的一个问题是,客户稍后会想要重新排序列表,因此允许所需顺序的另一种方法以及稍后在不调整代码的情况下更改该顺序的能力如下:
get_terms()
函数并在数组中包含以下设置。在本例中,jht\u order
是自定义字段的名称get\u terms()
更新:如果自定义字段是一个数字,您需要将“orderby”更改为“meta_value_num”,以便它将其排序为数字而不是ascii
'orderby' => 'meta_value_num'
您想要订购的基础是什么?@MikeBrant client Request我的意思是他们订购的逻辑是什么?它们不是按字母顺序排列的,也不是我能分辨出来的任何其他逻辑排序方式。如果您正在寻找硬编码的订单,而不是程序化的订单方式,那么您必须对其进行硬编码。@MikeBrant yes。顺序没有逻辑,这正是他们想要的。这就是为什么我很难找到解决办法。问题是,我的无序列表是由get_terms()的结果动态填充的,因此我不确定如何硬编码顺序?您必须构建一个自定义排序函数,以根据已知的术语对列表进行排序(如果检索到任何您没有硬编码规则的术语,可能它们会排序到最后)。或者,您可以手动将id更改为首选的排序顺序和按id排序。这应该是可接受的答案,并且有大量的投票,令人惊讶的答案。
$terms = get_terms_ordered( 'category', [], ['Term C', 'Term A', 'Term B'], 'name');
var_dump( $terms);
$terms = get_terms_ordered( 'category', [], 'Term C, Term A, Term B', 'name');
var_dump( $terms);
'orderby' => 'meta_value',
'meta_key' => 'jht_order',
'orderby' => 'meta_value_num'