get_posts changes main query

时间:2019-06-12 作者:sarah

这是我的单条代码。php:

<?php if (have_posts()):the_post() ?>
    <h3><?php the_title() ?></h3> <!-- Prints `Hello World` -->
    <?php if (!empty($someOtherPosts = get_posts([\'posts_per_page\' => 3]))): ?>
        <ul>
            <?php foreach ($someOtherPosts as $post): ?>
                <li><?php echo $post->post_title ?></li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
    <h3><?php the_title() ?></h3> <!-- Prints `Bye World` -->
<?php endif; ?>
为什么在下一次调用中我会得到不同的标题,我该如何处理?

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

get_posts() 未修改主查询。问题是您正在覆盖全局$post 中的变量foreach 环我猜如果您在模板中,那么您与全局变量在同一范围内,不需要指定global $post; 为了实现这一点(就像在函数中一样)。重命名$post 在您的循环中,问题就会消失:

<?php if (have_posts()):the_post() ?>
    <h3><?php the_title() ?></h3>
    <?php if (!empty($someOtherPosts = get_posts([\'posts_per_page\' => 4]))): ?>
        <ul>
            <?php foreach ($someOtherPosts as $someOtherPost): ?>
                <li><?php echo $someOtherPost->post_title ?></li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
    <h3><?php the_title() ?></h3>
<?php endif; ?>

相关推荐

The Loop not looping?

在进行了大量的故障排除和搜索之后,我想我终于明白了如何进行循环。但我似乎无法让它真正循环!我创建了一个子主题,并添加了functions.php 文件中包含以下代码:<?php function my_theme_enqueue_styles() { $parent_style = \'grow-thinkup-style-minimal\'; // This is \'twentyfifteen-style\' for the Twenty Fifteen the