PRE_GET_POST返回未格式化的页面

时间:2013-02-02 作者:Jamie

前几天,我运行了一个自定义循环来获取一些推特信息。因为我在一个模板中运行代码,并且该模板是从另一个循环调用的,所以我可以通过这样做来获取模板数据

 $content = $template->post_content;
 echo $content;
我想这比设置另一个循环要好。当我这样做时,我发现内容没有格式化。所以做了一点研究,我发现如果我通过内容过滤器

  $content = $template->post_content; 
  $content = apply_filters( \'the_content\', $content); 
  echo $content;
这解决了我的问题。所以现在我用这个功能在我的主页上获取页面,发现它做了同样的事情。它将返回未格式化的页面

 function posts_and_pages_on_home( $query ) {
  if ( $query->is_main_query() ) {
    $query->set( \'post_type\', array( \'post\', \'page\' ) );
    return $query;
  }
 }
 add_action( \'pre_get_posts\', \'posts_and_pages_on_home\' );
所以很自然,我想如果我通过相同的内容过滤器传递$query,它就会解决我的问题。不,我错了。有没有办法让函数通过内容过滤器过滤return$查询?

1 个回复
最合适的回答,由SO网友:Chris_O 整理而成

Thepre_get_posts 操作挂钩仅允许您修改$query object .

数据的任何格式化或输出都是在template file 在内部the loop. 当你处于循环中时,你可以访问各种template tags 输出格式化后的数据(应用过滤器)。

if ( have_posts() ) : while ( have_posts() ) : the_post();

    the_content(); //Same as echo apply_filters( \'the_content\', $post->post_content );

结束

相关推荐