Add_Filter()在循环中不起作用

时间:2012-02-02 作者:Shixons

我试图按修改日期在主页中排序帖子,并将此代码放入函数中。我的活动子主题的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\');
?>

1 个回复
最合适的回答,由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 对于订单,在请求中执行操作。

结束

相关推荐

Short code to display a loop

我一直在研究这个短代码,但没有成功。。。function loop_shortcode( $atts = \'\' ) { \'<div class=\"clear\"></div> <div class=\"childs grid_12\"> <?php $the_query = new WP_Query( array( \"post_parent\" => \