WordPress简单循环,大问题

时间:2013-02-03 作者:somdow

我遇到了一个问题,由于某种原因,我试图添加到侧边栏的基本循环。。。。在内部页面(single和page.php)上保持循环,但不在索引上保持循环。php。

在索引上。php(主页)很好。

例如,我希望循环填充无序的列表行项目,所以我这样做:

      <div id="sideBarMain">
        <h2>title4sidebar</h2>
       <ul>     
             <?php 
            query_posts( array ( \'category_name\' => \'left_sidebar\', \'posts_per_page\' => 4, \'orderby=menu_order\' ) );
            if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
            <li><a href="<?php the_permalink();  ?>"><?php the_title(); ?></a></li>
            <?php endwhile; endif; ?>
        </ul>

      </div><!-- sidebar ender -->
一些事情正在发生。最有问题的是,当这个循环到位时,它会中断导航和所有功能。我点击一个页面,页面加载了标题上的一个列表行项目。。。因此,如果我单击主导航上的“关于我们”,页面将加载“行项目标题”。。。。。

在单击的任何项目上也会发生。

2-是指在(page/single.php页面)的侧栏上,它将发布前4篇文章,其中包含类别“left\\u sidebar”的显示方式、css的位置以及所有内容,但在第四行项目之后,它将再次重复循环。

3-我的网站内容区域有2列,左侧是侧边栏,中间是主内容区域。在被错误重复的部分(循环重复之后),当我用FireBug检查时,在重复的行项目上,它也从我假设的H标记属性中获取了H标记,另一列上它旁边的一个H标记。因此,前4行项目与通过CSS、链接颜色、滚动等提供给它们的样式很好,而下一个buggy 4行项目没有样式,permalink也不像前4行项目那样应用于它们。

3-我从php循环中删除了所有html,如divs和ul/lis等,因此没有应用css,这样循环中只会出现文本,但同样的情况也会发生,因为我删除了循环中的html部分,前4个li会出现标准的默认蓝色链接文本等,而下面的buggy 4会出现与之前一样的所有大的附加了htags的错误。。。。

排除所有问题,-页面上只有一个循环来自侧边栏。-我正确地清除了所有浮点数-在W3C上检查错误等时,没有浮点数。绿灯通畅。-php方面没有错误。(我检查了每个页面并启用了错误)在本地服务器上。

我迷路了。

对可能发生的事情有什么想法吗?

注意:尽管侧边栏上只有一个循环,但要提前考虑。php页面,一旦从技术上导入,就有2个循环,我猜是边栏wp循环,还有页面。php/单个。获取内容的php循环。

最新的wp可能有什么不同吗?我总是这样做,现在我有问题了。。。。。。

有什么想法吗?我迷路了。

提前感谢。

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

添加wp_reset_query(); 在循环之后,防止页面上的其他循环(例如导航)中断。

<?php 
    query_posts( array ( \'category_name\' => \'left_sidebar\', \'posts_per_page\' => 4, \'orderby=menu_order\' ) );
    if ( have_posts() ) : while ( have_posts() ) : the_post();
?>

<li><a href="<?php the_permalink();  ?>"><?php the_title(); ?></a></li>

<?php
    endwhile; endif;
    wp_reset_query(); // reset query
?>
这是否也解决了您的其他问题?

参考号:http://codex.wordpress.org/Function_Reference/query_posts#Usage

SO网友:Milo

Don\'t use query_posts

query\\u posts()用于更改主循环。它通过替换用于生成主循环内容的查询来实现。使用query\\u posts()后,将更改与post相关的全局变量和模板标记。在调用query\\u posts()后调用的条件标记也将被更改-这可能是也可能不是预期的结果。

尽管抄本告诉你这只是为了改变主回路,但我会更进一步,说没有理由使用query_posts, 曾经使用pre_get_posts 改变主回路。

对于您的情况,在模板中创建其他循环,use WP_Query:

$args = array(
    \'category_name\' => \'left_sidebar\',
    \'posts_per_page\' => 4,
    \'orderby=menu_order\'
);

$sidebar_query = new WP_Query( $args );

if ( $sidebar_query->have_posts() ) :
    while ( $sidebar_query->have_posts() ) :
        $sidebar_query->the_post();
        <li><a href="<?php the_permalink();  ?>"><?php the_title(); ?></a></li>
    endwhile;
endif;

wp_reset_postdata();

SO网友:s_ha_dum

1) 是的,这将中断导航,因为query_posts overwrites the main page Loop. 不使用query_posts 对于二次循环,我真的想不出有什么好的理由使用它。使用新的WP_Query 对象(我的首选项)或类似的函数get_posts

$myquery = new WP_Query( 
  array ( 
    \'category_name\' => \'left_sidebar\', 
    \'posts_per_page\' => 4, 
    \'orderby=menu_order\' 
  ) 
);
if ( $myquery->have_posts() ) : 
  while ( $myquery->have_posts() ) : 
    $myquery->the_post(); ?>
    <li><a href="<?php the_permalink();  ?>"><?php the_title(); ?></a></li><?php   
  endwhile; 
endif;
其他问题可能与此相关,但您的描述令人困惑。

结束

相关推荐

Loop within a loop?

我在我的页面上使用了几个自定义的wp\\u查询循环,第一个循环从某个类别检索新闻,然后用permalink显示其中的一个小摘录。第二个是另一个wp\\u查询,它获取带有几个高级自定义字段的自定义帖子类型。问题是,我想在第二个循环中使用另一个循环,从新闻部分获取3篇文章,并带有缩略图(基本上与第一个循环相反,它将获取所有其他类别)。在阅读了无数关于循环的文章后,我不知道如何在第二个循环中创建“嵌套”循环。我相信这必须很简单,看起来很容易做到。下面是我的代码,其中去掉了很多html。<?php