WordPress循环函数(2)

大多数博客都有一个博客归档页面,可以显示一些内容,包括帖子标题,缩略图和摘录。 下面的示例显示了一个 简单的循环,检查是否有任何帖子,如果有的话,输出每个帖子的标题,缩略图和摘录。 如果没有帖子,它会以 括号显示消息

示例

让我们来看一下循环中的一些例子:

基本例子

博客归档

大多数博客都有一个博客归档页面,可以显示一些内容,包括帖子标题,缩略图和摘录。 下面的示例显示了一个
简单的循环,检查是否有任何帖子,如果有的话,输出每个帖子的标题,缩略图和摘录。 如果没有帖子,它会以
括号显示消息

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <h2>
        <?php the_title(); ?>
    </h2>
    <?php the_post_thumbnail(); ?>
        <?php the_excerpt(); ?>
            <?php endwhile; else: ?>
                <?php _e( 'Sorry, no posts matched your criteria.', 'textdomain' ); ?>
                    <?php endif; ?>

个人帖子

在WordPress中,每个帖子都有自己的页面,显示该帖子的相关信息。 模板标签允许您自定义要显示的信息。
在下面的例子中,循环输出帖子的标题和内容。 您可以在帖子或页面模板文件中使用此示例来显示有关该帖子的
最基本信息。 您还可以自定义此模板以向帖子添加更多数据,例如类别。

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <h1>
        <?php the_title(); ?>
    </h1>
    <?php the_content(); ?>
        <?php endwhile; else: ?>
            <?php _e( 'Sorry, no pages matched your criteria.', 'textdomain' ); ?>
                <?php endif; ?>

中间例子

下面的例子有几件事情:
首先,它显示每个帖子的标题,时间,作者,内容和类别,类似于上面的单个帖子示例。
接下来,通过使用in_category()模板标签,可以使类别ID为“3”的帖子的样式不同。
此示例中的代码注释在循环的每个阶段提供了详细信息:

// Start the Loop.
< ?php
if (have_posts()) : while (have_posts()) : the_post();
/* * See if the current post is in category 3.
* If it is, the div is given the CSS class "post-category-three".
* Otherwise, the div is given the CSS class "post".
*/
if (in_category(3)) : ?><div class = "post-category-three" > <?php
else: ?><div class = "post" > <?php endif; ? >
// Display the post's title.
< h2 > <?php the_title() ? ></h2>
                / / Display a link to other posts by this posts author. < small > <?php _e('Posted by ', 'textdomain');
the_author_posts_link() ? ></small>
/ / Display the post 's content in a div.
<div class="entry">
<?php the_content() ?>
        </div>
        // Display a comma separated list of the post's categories. < ?php _e('Posted in ', 'textdomain');
the_category(', '); ? >
// closes the first div box with the class of "post" or "post-cat-three"
< /div>
/ / Stop the Loop,
but allow
for a "if not posts"situation < ?php endwhile;
else:
/*
* The very first "if" tested to see if there were any posts to
* display. This "else" part tells what do if there weren't any.
*/
_e('Sorry, no posts matched your criteria.', 'textdomain');
// Completely stop the Loop.
endif; ? >

删除此部分

注意:此部分需要删除,但存在是因为手册插件中的错误无法正确显示主题框中的下一部分。

多重循环

在某些情况下,您可能需要使用多个循环。 例如,您可能希望在页面顶部的内容列表表中显示帖子的标题,然后
在页面上进一步显示内容。 由于查询没有被改变,所以我们需要在第二次循环访问这些信息时,回滚循环。 为
此,我们将使用函数rewind_posts()。 

使用rewind_posts() 

您可以再次使用rewind_posts()循环遍历相同的查询。 如果要在页面上的不同位置显示相同的查询两次,这将非
常有用。
以下是正在使用的rewind_posts()的示例:

// Start the main loop
< ?php
if (have_posts()) : while (have_posts()) : the_post();
the_title();
endwhile;
endif;
// Use rewind_posts() to use the query a second time.
rewind_posts();
// Start a new loop
while (have_posts()) : the_post();
the_content();
endwhile; ? >

创建辅助查询和循环

使用具有相同查询的两个循环相对容易,但并不总是您需要的。 相反,您通常会创建一个辅助查询来在模板上显
示不同的内容。 例如,您可能希望在同一页面上显示两组帖子,但对每个组执行不同的操作。 如下所示,一个
常见的例子是显示单个帖子,其中包含单个帖子下方相同类别的帖子列表。

<?php // The main query. if ( have_posts() ) : while ( have_posts() )
: the_post(); the_title(); the_content(); endwhile; else : // When no posts
are found, output this text. _e(
'Sorry, no posts matched your criteria.' ); endif; wp_reset_postdata(); /* * The secondary query. Note that you
can use any category name here. In ou r example, * we use
"example-category". */ $secondary_query=n ew WP_Query( 'category_name=example-category'
); // The second loop. if ( $secondary_query->
    have_posts() ) echo '
    <ul>
        '; while ( $secondary_query->have_posts() ) : $secondary_query->the_post();
        echo '
        <li>
            ' . get_the_title() . '
        </li>
        '; endwhile; echo '
    </ul>
    '; endif; wp_reset_postdata();
?>

如上例所示,我们首先显示一个常规循环。 然后我们定义一个使用WP_Query查询特定类别的新变量; 在我们的
例子中,我们选择了示例类别的插件。

请注意,上述示例中的常规循环有一个区别:它调用wp_reset_postdata()来重置帖子数据。 在您可以使用第
二个循环之前,您需要重置帖子数据。 有两种方法可以做到这一点:

  • 通过使用rewind_posts()函数; 要么
  • 通过创建新的查询对象。

重置多个循环

在您重置它们的模板中使用多个循环时,这很重要。 不这样做可能会导致意外的结果,因为数据在全局$post变
量中的存储和使用。 有三种主要的方法来重置循环,具体取决于它们的调用方式。

  • wp_reset_postdata()
  • wp_reset_query()
  • rewind_posts()

使用wp_reset_postdata(

当您使用WP_Query运行自定义或多个循环时,请使用wp_reset_postdata()。 此函数将全局$post变量恢复到
主查询中的当前帖子。 如果您遵循最佳做法,这是您将用来重置循环的最常用功能。
要正确使用此功能,请在使用WP_Query的任何循环后放置以下代码:

<?php wp_reset_postdata(); ?>

这是一个使用WP_Query的循环的示例,它使用wp_reset_postdata()重置。 

<?php // Example argument that defines three posts per page. $args=a rray(
'posts_per_page'=>
    3 ); // Variable to call WP_Query. $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) : // Start the Loop while ( $the_query->have_posts()
    ) : $the_query->the_post(); the_title(); the_excerpt();
    <?php // Example argument that defines three posts per page. $args=a rray(
    'posts_per_page'=>
        3 ); // Variable to call WP_Query. $the_query = new WP_Query( $args );
        if ( $the_query->have_posts() ) : // Start the Loop while ( $the_query->have_posts()
        ) : $the_query->the_post(); the_title(); the_excerpt();

使用wp_reset_query()

使用wp_reset_query()将WP_Query和全局$post数据恢复到原始主查询。 如果在循环中使用query_posts(),
则必须使用此功能来重置循环。 您可以在使用WP_Query自定义循环后使用它,因为它在运行时实际调用
wp_reset_postdata()。 然而,最好的做法是使用wp_reset_postdata()与涉及WP_Query的任何自定义循环。

请注意:query_posts()不是最佳实践,如果可能的话应该避免。 因此,您不应该对wp_reset_query()有很多
用处。

要正确使用此功能,请在使用query_posts()的任何循环后面放置以下代码。

<?php wp_reset_query(); ?>
WordPress 专栏Wordpress主题开发专栏汇总主题基础

Wordpress主题函数(1)

2022-10-21 14:28:58

WordPress 专栏Wordpress主题开发专栏汇总主题基础

Wordpress连接主题文件和目录(1)

2022-10-26 21:54:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索