使用WP_QUERY的自定义查询不起作用

时间:2016-10-21 作者:newjonnydepony

我对自定义查询有一个小问题,只有当用户在主页上时才应该使用该查询(is_home()) 以及何时is_main_query == true . 我有一个函数pre_get_posts 为了使用我的自定义查询,但不幸的是,当调用该函数时,html-<;body> 为空。我错过什么了吗?

functions.php

<?php
    function my_function(){

      if( is_home() && $query->is_main_query()){
      global $wp_query;

      // the arguments

      $args = array(
          \'post_type\'         => \'post\',
          \'posts_per_page\'    => \'3\',
      );

      // the query

      $query = new WP_Query($args);

      // the Loop

      if( $query->have_posts()) { ?>
          <section class="recent-posts clear">
          <?php while ( $query->have_posts() ) : $query->the_post() ; ?>                
              <article id="post-<?php the_ID(); ?>" <?php post_class( \'left\'   ); ?>>
                  <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php post_thumbnail( \'thumbnail\' );?></a>              
                  <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>                
              </article>
          <?php endwhile; ?>                
          </section>
          <?php 
      }

      // restore original Post Data
      wp_reset_postdata();
    }        
?>

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

目前还不清楚目标是什么,但这里有一些建议:

一般来说pre_get_posts 钩子不是实例化二次查询以显示HTML的好地方。

当前设置将导致infinite-loop, 因为当你实例化WP_Querypre_get_posts 回调时,您将递归地实例化它,直到出现错误达到递归限制为止。

有几种方法可以实例化WP_Querypre_get_posts, 在第一次运行后删除回调,但我认为这不是您想要的。

从功能中删除此部分:

if( is_home() && $query->is_main_query()){
    global $wp_query;
例如,在主模板中显示功能。请注意$query 在该行中未定义。

还有方便的get_template_part() 如果要继续使用模板分区。

您可能还需要考虑一个合适的函数前缀,而不是my_, 以避免可能的名称冲突。

相关推荐

从wp-Query获取数据,在循环之外&不更改url

我正在基于自定义分类法在wordpress上进行高级搜索。我已经被困72小时了,所以我希望能得到一些帮助或思考。。。步骤1——在js文件中,查询字符串如下所示:if (jQuery(\'#s\').val() == \'\'){ URL = \"/?genre=\" + genre + \'...other Stuff\' #content\'; }else{ URL = \"/?s=\"+searchQueryString+\"&genre=\" + genre +\'.