Wordpress在主循环期间发布

时间:2015-07-07 22:16:20

标签: php wordpress

虽然wordpress正在进行主循环,但它如何确定哪个帖子属于当前页面?

<?php while ( have_posts() ) : the_post(); ?>

    <?php
        get_template_part( 'template-parts/content', get_post_format() );
    ?>

<?php endwhile; ?>

在上面的例子中,WordPress如何确定将循环播放哪个帖子?

循环会完成所有帖子吗?

3 个答案:

答案 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代码都将在每个帖子上处理。

The Loop

答案 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();

    } 
} 
?>