嘿WordPress开发人员/ php大师。长话短说,我正在使用WordPress(而我从未使用过WordPress,对不起!),当我查看从single.php渲染的单个帖子时,“ have_posts()”函数返回的是false。模板已渲染,但模板渲染没有任何问题,我只是遇到了“ have_posts()”显示错误且未输出博客帖子的问题。
我下载了WordPress 5.0.3,它在MAMP上运行,并且以前使用此方法没有任何问题。总而言之,我试图使模板文件保持井井有条,并使用get_template_part检索主题的各个部分。
我当前的结构是:
single.php -
<?php
get_template_part('template-parts/blog/_single/blog-post-banner'); // Renders perfect
?>
<div class="light-grey">
<div class="container">
<div class="row no-margin">
<div class="col s12 l9 mb-0-l">
<?php get_template_part('template-parts/blog/_single/blog-post'); // Renders perfect ?>
</div>
<div class="col s12 l3 mb-0-l">
<?php get_template_part('template-parts/blog/side-bar'); // Renders perfect ?>
</div>
</div>
</div>
</div>
当然,真正的罪魁祸首是博客文章部分-
<?php
if (have_posts()) :
the_post(); ?>
<div class="row no-margin">
<div class="col s12 no-margin relative">
<img src="<?php the_post_thumbnail_url('medium_size'); ?>" alt="<?php the_title(); ?>" class="block">
</div>
<div class="col s12">
<div class="white p-2-s p-3-l">
<?php the_content(); ?>
</div>
</div>
</div>
<?php else :?>
<div class="col s12 no-margin">
<div class="white p-2-s p-3-l"><p>Sorry, we couldn't find the post you were looking for.</p></div>
</div>
<?php endif; ?>
同样,模板呈现完美,但是' have_posts()'返回 false 并吐出我的 else 部分我的声明。我已经在另一个模板中使用了这种方法,并且此方法在以前非常有效(尽管我承认,我喜欢在node上进行开发,而WordPress和php确实使我有时不敢相信我)。有什么我想念的吗?
我已经检查了我从头开始编写的functions.php,其中没有一件事可能会影响该帖子,但是如果您需要查看它,我很乐意与您分享(禁用了functions.php的每个部分,以检查是否有帮助并且没有运气)。我没有添加任何插件,甚至没有添加默认的插件(我是一个傻瓜,想从头开始构建大多数内容,所以我知道它的工作原理。)
我错了吗,在single.php页面上“ have_posts()”的输出应该是正确的吗?我的零件有做错什么吗?标语确实使用了' the_title()'标签和' the_date()'标签,但两个php标签均已正确关闭。非常感谢您对我为什么会对此有所误解的一些见解。谢谢大家!
** 编辑 **-当我调试 blog-post 部分并var_dump have_posts()时,我将其放置在if语句上方,并呈现了所有内容。看起来像这样:
<?php
var_dump(have_posts()); // <---------------- Added this and it rendered
if (have_posts()) :
the_post(); ?>
var_dump输出为false,但是如果我第二次这样做,则现在为true。有什么想法吗?目前,我将Have_posts()存储在一个随机变量中,因此没有输出,并且现在显示该帖子。我很高兴现在可以显示该帖子,但我知道这不一定是“可靠的解决方案”。有什么想法吗?
答案 0 :(得分:0)
所以首先我只想说,@ Jeppe,你一直都做对了。如果我可以将您的评论标记为正确(如果可以的话,请告诉我如何)。
对于其他偶然发现此帖子的人,归结为使用“ rewind_posts()”功能。总而言之,我在代码中的某个地方有一个循环,我无法确定其为罪魁祸首,这实际上是在迫使我的' have_posts()'函数返回false,因为我没有重置/根据WordPress重新整理。
我的解决方案是仅采用旧代码:
<?php
if (have_posts) :
the_post;
?>
并在if语句上方添加rewind_posts()函数:
<?php
rewind_posts(); // <---------- This guy right here.
if (have_posts) :
the_post;
?>
这将倒回WordPress的循环并允许have_posts()打印true。