我想知道是否有人可以解释以下内容,我正在关注有关wordpress的教程,我看到这段代码被用来遍历帖子并显示它们,但是我对这里实际发生的事情有些困惑。
<?php
if( have_posts() ):
while( have_posts() ): the_post(); ?>
<h3><?php the_title(); ?></h3>
<p><?php the_content(); ?></p>
<?php endwhile;
endif;
?>
与我有关的特殊部分是while( have_posts() ): the_post(); ?>
因此,首先,这里的语法不是我以前见过的,打开和关闭while循环括号,然后再使用: the post()
,这是什么第二部分?我虽然while循环的条件必须在while()
内部。 : the_post()
是做什么的?
另外,如果有帖子,方法have_posts()
返回true,我不明白为什么这不是一个无限循环,因为只要have_posts()
只要存在数据库中至少有一个帖子。
最后,我喜欢使用PHP短标签,现在,当我这样做时,此代码将不再起作用,这是我的短标签代码版本,有人可以告诉我我要去哪里。
<? if ( have_posts() ): ?>
<? while ( have_posts() ) : the_post(): ?>
<h3><?php the_title(); ?></h3>
<p><?php the_content(); ?></p>
<? endwhile; ?>
<? endif; ?>
PHP风暴突出显示了:
中的最后一个<? while ( have_posts() ) : the_post(): ?> as the error, but if I change it to a
;`我遇到了以下错误
Warning: count(): Parameter must be an array or an object that implements Countable in C:\laragon\www\blog\wp-includes\post-template.php on line 293
我意识到这里有两个问题,对不起,我只想完全了解这里实际发生的情况,而不仅仅是盲目地复制和粘贴。希望你能理解。
谢谢。
答案 0 :(得分:0)
1)While循环语法
正在使用的语法是在PHP中执行“控制结构”的另一种方法,如此处所述:https://www.php.net/manual/en/control-structures.alternative-syntax.php
从本质上讲,这是编写以下内容的另一种方式:
while (have_posts()) {
the_post();
?>
<h3><?php the_title(); ?></h3>
<p><?php the_content(); ?></p>
<?php
}
代码的功能没有什么区别,只是有时比使用花括号更容易匹配
2。 have_posts()
和the_post()
您是对的,如果有帖子,它将返回true,但是对the_post()
函数的调用阻止了它无限循环。
the_post()
要做的是设置访问帖子数据所需的所有变量(例如$post
全局变量),然后将计数器增加1。
这意味着,如果您只有一条帖子,则对have_posts
的第二次调用现在将返回false,因为计数器等于其可用的帖子数。
3。 PHP短标签
我猜这是因为您的服务器未设置为使用短标签。您需要在php.ini配置中启用short_open_tag
设置。
https://www.php.net/manual/en/ini.core.php#ini.short-open-tag