按分类术语排序存档自定义帖子

时间:2018-07-30 作者:artist learning to code

我不能改变事情的方式,所以我不能使用自定义元。。。

我的术语是年,我必须按顺序显示归档文件(术语从最新到最旧,未发布日期),例如,术语是200720082009。我需要这些帖子先显示2009年的,然后是2008年的,然后是2007年的。

我更喜欢使用函数而不是查询调用。为什么?我使用的是通用档案。php页面,不将其用于post类型。我想保持这样。

我试图在主题中添加一个功能,以改变某些帖子的显示方式,但没有成功。请帮帮我!:D

add_action(\'pre_get_posts\', \'my_change_sort_order\');

function my_change_sort_order($query)
{
if (is_post_type_archive($post_types = \'zee_publications\')):
    $query->set(\'order\', \'desc\');

    $query->set(get_terms(array(
        \'taxonomy\' => \'cat_publications\',
        \'orderby\',
        \'slug\'
    )));
endif;
};

1 个回复
SO网友:Krzysiek Dróżdż

第一件事第一。。。为什么不起作用

您的代码不工作,因为您错误地使用了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挂钩将术语名称存储为元值,然后根据此元值对文章进行排序。。。

结束

相关推荐

Custom archives function

我正在为我的教会网站建立一个自定义档案页面。在我的档案页上,我想把上周的布道放在一个特殊的盒子里,然后是未来的布道,最后是布道档案。我希望将来的布道和布道档案用标题隔开。。。i、 未来的布道布道档案布道档案。。。我的问题是,当我用分页功能点击按钮转到旧的布道帖子时,它会在我所在的每个归档页面上显示当前和未来的布道!如何使当前和未来的布道仅显示在第1页上,而不在单击查看旧帖子时显示?以下是我的功能:// Create the loop for the sermons page function se