我试图按修改日期在主页中排序帖子,并将此代码放入函数中。我的活动子主题的php:
function orderby_last_modified() {
return \'post_modified DESC\';
}
如果我在相同的函数中添加过滤器。它工作的php文件:
add_filter(\'posts_orderby\', \'orderby_last_modified\');
但我只想在主页循环中使用过滤器,当我将该行更改为主页时,它就不起作用了。
<?php
add_filter(\'posts_orderby\', \'orderby_last_modified\');
if(have_posts()):
while(have_posts()) atom()->template(\'teaser\');
remove_filter(\'posts_orderby\', \'orderby_last_modified\');
?>
最合适的回答,由SO网友:Milo 整理而成
它在模板中不起作用,因为在加载模板之前查询已经发生。如果只想在某些条件下添加过滤器,则需要挂接一个早期操作,如pre_get_posts, 并检查查询是否针对主页:
function add_my_orderby_filter( $query ) {
if ( $query->is_home ) {
add_filter(\'posts_orderby\', \'orderby_last_modified\');
}
}
add_action( \'pre_get_posts\', \'add_my_orderby_filter\' );
这会在你的
functions.php
以及您的
orderby_last_modified
作用
查看WordPressAction Reference 对于订单,在请求中执行操作。