wordpress基本循环问题

时间:2013-02-03 16:05:39

标签: wordpress

我有一个问题,出于某种原因,我试图添加到侧边栏的基本循环保持....继续循环内部页面(单个和页面.php)但不在index.php上。

index.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 -->

有些事情正在发生。 1.最常见的问题是,当这个循环到位时,它会破坏导航和所有。我点击一个页面,页面加载了标题上的一个列表行项目...所以如果我点击主导航中的“关于我们”,页面加载“行项目标题”而不是....

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

2 - 就在(page / single.php页面)上,在侧边栏上,它会发布前4个帖子,类别为“left_sidebar”,应该如何显示,css到位以及所有但是在第四个之后行项目,它将再次重复循环。

3 - 我的网站内容区域有2列,左侧是侧边栏,中间是主要内容区域。在错误重复的部分(循环重复之后),当我使用FireBug检查时,在重复的行项目上,它还从我假设的H标记属性,在另一列上的旁边的h标记。所以前4个系列项目很好,通过CSS,链接颜色,翻转等给他们的样式,而下一个4号线项目出来没有风格,永久链接也没有被应用到他们像前4个等

3 - 我从那个php循环中删除了所有html,如div和ul / lis等所以没有应用css,这种方式只有文本从循环中出现但是同样的事情发生了,因为我删除了html部分循环,前4个li提出了标准的默认蓝色链接文本等,并且下面的bug 4与之前的所有大型htags附加相同....

排除故障, - 页面上只有一个循环来自侧边栏。 - 我已正确清理所有花车 - 当检查W3C的错误等时,没有。绿灯贯穿始终。 - 在PHP方面没有错误。 (我已检查过每一页并启用了错误)在本地服务器上。

我迷失了。

关于可能发生的事情的任何想法?

注意:提前思考,虽然sidebar.php页面上只有一个循环,一旦从技术上导入了2个循环,我猜是侧边栏wp循环,而page.php / single.php循环获取内容

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

任何想法?我输了。

先谢谢。

2 个答案:

答案 0 :(得分:2)

你的问题有两个方面:

1)停止使用query_posts 是不完美的。关于为什么使用这个函数需要结束有很多有充分记录的原因,但我认为this is the best explanation

2)您没有重置查询。更多关于这一点。

回到1号,query_posts的问题在于它会影响全局$ wp_query对象。如果您打算修改主循环,那就没问题,但这不是您在这里尝试做的。您需要使用的是WP Query。创建新查询对象的语法与query_posts相同,但好处是您不再影响$ wp_query的全局实例。

重置查询还可确保查询对象不会影响使用Wordpress查询的其他代码段。

尝试将代码示例更改为:

<?php 
$query = new WP_Query(array('category_name'=>'left_sidebar','posts_per_page'=>4,'orderby=menu_order'));
if($query->have_posts()) : while($query->have_posts()) : $query->the_post();
?>
<li><a href="<?php the_permalink();  ?>"><?php the_title(); ?></a></li>
<?php
endwhile;endif;
wp_reset_postdata();
?>

答案 1 :(得分:1)

你的functions.php中可能有一些与这些函数交互的过滤器。看看那里,看看你是否想找点东西。

您还应该在循环之前和之后尝试使用<?php wp_reset_query(); ?>,这样您就可以确保它不会与其他人互动。