虽然wordpress正在进行主循环,但它如何确定哪个帖子属于当前页面?
<?php while ( have_posts() ) : the_post(); ?>
<?php
get_template_part( 'template-parts/content', get_post_format() );
?>
<?php endwhile; ?>
在上面的例子中,WordPress如何确定将循环播放哪个帖子?
循环会完成所有帖子吗?
答案 0 :(得分:2)
主查询针对每个页面请求运行。主查询使用WP_Query
类根据通过页面的URL结构设置的参数来获取帖子。 WP_Query
在主查询中的工作方式与自定义查询完全相同,这里唯一的不同之处在于传递参数的方式。对于主查询,传递的参数由URL确定,而对于自定义查询,参数由用户手动设置
简而言之,这就是浏览器发出的每一页请求都会发生的事情
检查URL,并根据db中保存的结构检查当前永久链接结构。如果有任何其他永久链接结构而不是默认的永久链接结构,则会根据默认结构检查当前永久链接结构,并匹配URL
根据URL和永久链接结构生成一组带有值的参数。请记住,URL结构是一组$_GET
变量,此$_GET
变量是一个键/值对,表示WP_Query
中的参数/值对。在从URL填充其他参数之后仍然留下的空白参数(有足够的)将填充默认值。例如,每页的帖子由get_option( 'posts_per_page' )
设置,表示在后端阅读设置中设置的帖子数量。
简而言之,到目前为止,上述内容是,如果您请求网站的类别页面,则会检查URL并确定为类别页面。标识类别并将其作为键/值对传递给查询,最后将确定当前页面必须显示此特定类别的帖子
从所有这些参数及其值中,相应地构建SQL查询,该查询将根据SQL查询中设置的条件在数据库中查询帖子。这些帖子将被返回并存储为对象
这些帖子对象连同其他重要信息存储在一个大对象中,主要查询对象存储在$wp_query
全局变量
到目前为止,循环完全没有做任何事情。无论您是否在页面上有循环,都会发生上述所有情况。循环只做两件事
访问主查询对象并循环遍历帖子对象。这些对象如何发送到屏幕取决于如何在循环内构建HTML标记,PHP和CSS。循环使用while()
循环,如果有另一个帖子要显示,则在完成一个帖子后进行检查。如果有,则while()
继续执行,并且它会一直执行,直到不再有帖子为止,然后执行死刑。这是基本的PHP,因此请务必检查while()
循环如何工作
循环执行的第二个功能是设置$post
全局值。这是通过循环内的the_post()
调用完成的。在每次迭代中,$post
全局设置为当前正在循环的帖子
这只是一个基本概述。每个过程都很庞大,很难理解,因此,人们无法详细解决整个过程。我希望这有帮助
答案 1 :(得分:0)
我很确定简短的回答是“它在当前页面的查询中”。该codex讨论了循环并理解了它的用法:
使用The Loop,WordPress处理每个帖子以显示在当前页面上,并根据它与The Loop标签中指定条件的匹配方式对其进行格式化。循环中的任何HTML或PHP代码都将在每个帖子上处理。
答案 2 :(得分:-1)
我觉得用这个代码显示帖子
<?php
get_template_part( 'loop', 'index' );
?>
u can use wp_query Object
<?php
// The Query
$args = array (
'post_type' => 'post',
'post_status' => 'publish',
);
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>
其他代码在这里
<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_title();
the_content();
}
}
?>