除了存档页面上的默认设置外,还可以自定义循环

时间:2014-05-02 作者:psorensen

我正在尝试在管理员上创建一个界面,允许我们的作者选择最重要的资源作为归档页面的一部分。我试图在存档页面上运行的原始查询之外添加一个循环。我有

设置带有转发器字段的页面在存档中引用此页面以获取转发器信息(通过将转发器命名为与分类法slug相同的名称并使用get_queried_object()->slug.我在两个循环之间遇到了一些干扰:

archive.php:

//REPEATER LOOP

<?php 
$slug = get_queried_object()->slug;
$posts = get_field($slug, 156053); //returns the post objects from the page with the repeaters

if( $posts ): ?>

    <ul>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        //post markup
    <?php endforeach; ?>
    </ul>
    <?php wp_reset_postdata(); ?>

<?php endif; ?>

//ORIGINAL ARCHIVE LOOP

<?php while (have_posts()) : the_post(); ?>
  <?php get_template_part(\'templates/content\', get_post_format()); ?>
<?php endwhile; ?>
在这种情况下,第一个循环按预期工作,原始归档循环返回正确数量的帖子,但postdata来自原始循环。(即,第一个循环返回3个结果,第二个循环返回26个结果,但前3个结果与原始循环中的3个结果相同,其余为空)。

我发现更改中继器循环变量的$post 消除了与原始归档循环的冲突,但转发器循环会引入归档循环的第一个帖子(x3,转发器指定的帖子数量)

这件事真让我抓狂。非常感谢您的帮助!

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

我同意s\\u ha\\u dum的观点,现在还不清楚发生了什么,但你试过了吗wp_reset_postdata()? 我相信你会把它放在最后while 在上面的例子中循环。

这里有一篇文章介绍了在查询不起作用时重置查询的其他方法:http://digwp.com/2011/09/3-ways-to-reset-the-wordpress-loop/

结束

相关推荐

显示Archives.php中的所有自定义帖子类型

我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W