Several loop in search result

时间:2013-11-16 作者:jeremybarbet

我想在搜索后的结果中使用两个循环。

首先,如果有结果,我开始循环

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
并在循环后显示属于某个类别的文章

<?php $cats = get_categories();

    foreach ($cats as $cat) {
        query_posts(\'cat=\'.$cat->cat_ID); ?>

        <h2><?php echo $cat->cat_name; ?></h2>

        <ul>
            <?php while (have_posts()) : the_post(); ?>
            <li><?php the_title(); ?></li>
            <?php endwhile;  ?>
        </ul>

        <?php } ?>
但它似乎显示了所有的文章,或者形成了一个无限循环,不适合一开始提出的请求。

EDIT : 在这个结果页面中,我将按类别进行组织。例如,如果我有四篇文章属于同一个类别,它只会显示一次类别名称。

Category_name_1

<第一篇文章

第二篇文章

第三篇文章

Category_name_2

<第一篇文章

2 个回复
SO网友:Por

添加wp\\u reset\\u postdata();每次循环后,如果使用自定义查询,则应使用wp\\u reset\\u query();

SO网友:s_ha_dum

外部循环使用global 变量$wp_query. query_posts 更改中的数据global 变量$wp_query. 自从你跑步以来query_posts 在循环的每次迭代中,重击$wp_query 每次,一个无限循环几乎是不可避免的,还有其他不必要的行为。这就像试图数到100,但每次你得到一个数字,你必须从其他一些随机数开始。它不起作用。

解决办法是不要摔$wp_query 您可以遵循本网站的座右铭:不要使用query_posts, 曾经

相反,创建一个新的WP_Query 对象如中所示this example from the Codex:

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo \'<li>\' . get_the_title() . \'</li>\';
    }
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
就你而言,我不能百分之百确定你的目标是什么,但要显示所有类别的帖子,应该这样做:

$cats = get_categories();

foreach ($cats as $cat) {
  $catposts = new WP_Query(
    array(
      \'cat\' => $cat->cat_ID,
      \'ignore_sticky_posts\' => true,
      \'posts_per_page\' => -1
    )
  ); ?>

  <h2><?php echo $cat->cat_name; ?></h2>

  <ul><?php 
    while ($catposts->have_posts()) {
      $catposts->the_post(); ?>
      <li><?php the_title(); ?></li><?php 
    } ?>
  </ul><?php
}
现在,我想您可能只想显示与外部循环中当前帖子相同类别中其他帖子的链接。因为你不想get_categories, 你想要的wp_get_post_categories

if (have_posts()) { 
  while (have_posts()) {
    the_post();
    $cats = wp_get_post_categories($post->ID,array(\'fields\' => \'all\'));

    foreach ($cats as $cat) {
      $catposts = new WP_Query(
        array(
          \'cat\' => $cat->term_id,
          \'ignore_sticky_posts\' => true,
          \'posts_per_page\' => -1
        )
      ); ?>

      <h2><?php echo $cat->name; ?></h2>

      <ul><?php 
        while ($catposts->have_posts()) {
          $catposts->the_post(); ?>
          <li><?php the_title(); ?></li><?php 
        } ?>
      </ul><?php
    }
  }
}

结束

相关推荐

Querying Term Posts in Loop

我试图在标题下显示我的CPT类别以及与之相关的任何帖子。我有第一个循环,很好:<?php $cats = get_categories(array(\'taxonomy\' => \'custtax\', \'orderby\' => \'term_group\')); if(!empty($cats)) : foreach($cats as $cat) : ?> <a href=\"<?php