我试图显示某个类别的帖子列表,我可以分页。自从我读到这个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;
似乎可以解决内存分配问题,但是如果我打算多次运行循环,这当然是不可取的。
最合适的回答,由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 "...";
}