第一件事第一。。。为什么不起作用
您的代码不工作,因为您错误地使用了WP API。。。
方法set
只接受两个参数:
set($query\\u var,$value)
将命名查询变量设置为特定值。
那么如何在代码中使用它呢?
$query->set( get_terms( array(
\'taxonomy\' => \'cat_publications\',
\'orderby\',
\'slug\'
) ) );
只有一个论点(所以是
$query_var
- 变量名称)并传递
get_terms
结果在那里。。。
那么这个函数在做什么呢?它检索给定分类法或分类法列表中的术语(并返回术语列表)。
好的,所以您当前的代码基本上是创建一些自定义查询变量,其名称设置为数组,其中包含术语,没有值。
所以现在应该很清楚了,为什么这段代码没有达到您想要的效果。。。
那么,如何使用WP\\u查询按术语排序帖子呢
让我们看看
Order & Orderby Parameters. 正如您所看到的,您可以按许多属性排序,但是。。。术语不在这些属性中。
这是由数据库结构造成的,按术语排序帖子效率不高,而且非常罕见,因此实现它没有意义。
那么怎么做呢?你不能-没有办法使用WP\\u查询按条款订购帖子。不管你是否创造了自己的WP_Query
循环,或者如果使用pre_get_posts
(如您所做)修改全局$wp_query
例子
那么这真的不可能吗
不,当然有可能。您始终可以控制给定WP\\U查询正在创建和修改的原始SQL。
岑克在他的回答中给出了这样一个问题的例子:https://wordpress.stackexchange.com/a/136825/34172
当然,您不必将其用作原始查询。您可以使用posts_clauses
筛选以将缺少的SQL部分添加到WP\\U查询生成的查询中。
但它不会有效率,也不容易正确实现。有很多边界条件,很多事情可能会出错(如果一些帖子有多个术语,等等)
你也可以作弊一点,WP\\u查询可以按元值排序帖子。因此,您可以使用save\\u post挂钩将术语名称存储为元值,然后根据此元值对文章进行排序。。。