1

我遇到了一个问题,由于某种原因,我试图添加到侧边栏的基本循环保持....在内部页面(单个和页面 .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 标签属性,在另一列上它旁边有一个 h 标签。因此,前 4 个行项通过 CSS、链接颜色、翻转等赋予它们的样式很好,下一个错误的 4 个行项没有样式,固定链接也没有像前 4 个等那样应用于它们.

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

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

我迷路了。

关于会发生什么的任何想法?

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

可能与最新的wp有什么不同吗?我一直这样做,现在我有问题......

有任何想法吗?我迷路了。

提前致谢。

4

2 回答 2

2

您的问题有两个方面:

1)您必须停止使用 query_posts。关于为什么需要结束使用此功能有很多有据可查的原因,但我认为这是最好的解释

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();
?>
于 2013-02-03T16:19:24.887 回答
1

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

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

于 2013-02-03T16:18:36.493 回答