使用非常简单的WP_QUERY耗尽内存限制

时间:2018-05-30 作者:AKor

我试图显示某个类别的帖子列表,我可以分页。自从我读到这个get_posts() 不支持分页,但WP_Query 是的,我用的是后者。

我的问题是:

    $mainPosts = new WP_Query(array(
      \'post_type\'        => \'post\',
      \'posts_per_page\'   => 1,
      \'category_name\'    => \'main\',
    ));
我原来有posts_per_page 设置为10,但我已设置为1。无论我尝试什么,都会出现类似以下错误:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 140513280 bytes) in /app/public/wp-includes/functions.php on line 3730
我知道,如果我试图拉数千篇帖子或执行某种非常昂贵的查询,就会发生这种情况,但这类帖子总共有5-6篇。我可以print_r 返回的对象,并看到它只拉我指定的单个帖子。

我应该注意,只有在我尝试运行时才会发生这种情况while ($mainPosts->have_posts()) { ... }.

下面是我对查询所做操作的完整代码:

if ($mainPosts->have_posts()) {

    while ($mainPosts->have_posts()) {
        $postItemImage = the_post_thumbnail_url();
        $postPermalink = the_permalink();
        $postTitle = the_title();
        $postDay = the_date(\'F jS Y\');
        $postExcerpt = the_excerpt();

        echo "<div class=\'row post-item\'><div class=\'col-6 post-item-left\'>
                        <div class=\'post-item-image\' style=\'background-image:url(\\"{$postItemImage}\\")\'></div></div>
                        <div class=\'col-6 post-item-detail\'><h3>{$postTitle}</h3><div class=\'post-item-detail-header\'>{$postDay}</div>
                        <div class=\'post-item-detail-main\'>{$postExcerpt}</div><a href=\'{$postPermalink}\'>Read more</a></div></div>";

    }
}
我在这里做错了什么?我如何使用WP_Query 没有内存分配问题?

Edit: 我发现使用break; 似乎可以解决内存分配问题,但是如果我打算多次运行循环,这当然是不可取的。

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

您的查询看起来不错,所以我怀疑它是否会导致任何问题。但是。。。让我们看看您的循环:

if ($mainPosts->have_posts()) {

    while ($mainPosts->have_posts()) {
        $postItemImage = the_post_thumbnail_url();
        ...    
        echo "...";

    }
}
首先,这里没有其他任何东西,所以这个if没有任何意义。但这个循环还有更大的问题。。。

这将是一个无限循环,因为没有$mainPosts->the_post(), 所以它不会“消耗”帖子,所以在检查循环条件时总是会有所有帖子。

这将很好地工作:

while ($mainPosts->have_posts()) {
    $mainPosts->the_post();
    $postItemImage = the_post_thumbnail_url();
    ...    
    echo "...";
}

SO网友:idpokute

可能您的一些插件使用内存。如果我是你,我会关掉所有插件,然后再试一次。然后我可能会尝试找到插件。另一方面,代码糟糕的主题可能是罪魁祸首。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post