have_posts()在应为true的情况下在“ single.php”上输出false

时间:2019-01-26 17:21:20

标签: php wordpress

嘿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()存储在一个随机变量中,因此没有输出,并且现在显示该帖子。我很高兴现在可以显示该帖子,但我知道这不一定是“可靠的解决方案”。有什么想法吗?

1 个答案:

答案 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。