循环

循环是WordPress通过主题的模板文件。检索的帖子数量由“阅读”设置中定义的每页显示的帖子数决定。在循环中,WordPress检索要显示在当前页面上的每个帖子,并根据主题的说明对其进行格式化。

循环从WordPress数据库中提取每篇文章的数据,并在每篇文章中插入适当的信息模板标记。将处理The Loop中的任何HTML或PHP代码每个岗位.

简单地说,Loop名副其实:它一次循环访问为当前页面检索到的每个帖子,并执行主题中指定的操作。

您可以将循环用于许多不同的事情,例如:

  • 在博客主页上显示文章标题和摘录;
  • 在一篇文章上显示内容和评论;
  • 使用模板标记在单个页面上显示内容;
  • 显示数据来自自定义帖子类型和自定义字段。

您可以在模板文件中自定义“循环”,以显示和操作不同的内容。

回路细节

基本循环是:

<?php(电话)如果(have_posts()):while(have_posts()):post();//显示文章内容endwhile;endif;?>

这个循环表示当有帖子时,循环并显示帖子。细分为更多细节:

  • 这个have_posts()函数检查是否有帖子。
  • 如果有帖子虽然只要括号中的条件在逻辑上为真,循环就会继续执行。只要have_posts()继续为true,循环将继续。

使用循环

回路应置于索引.php以及用于显示帖子信息的任何其他模板中。因为您不想反复复制标头,所以循环应该始终放在调用之后获取页眉()例如:

<?php(电话)获取页眉();如果(have_posts()):while(have_posts()):post();//显示帖子内容endwhile;endif;?>

在上面的示例中,循环的末尾显示为循环结束结尾。循环必须始终以相同的开头如果虽然语句,如上所述,必须以相同的结束语句结尾。

任何模板标记您希望应用于所有帖子的内容必须存在于开始和结束语句之间。

您可以包括一个自定义的404“找不到”消息,如果没有符合指定条件的帖子可用,则会显示该消息。消息必须放置在循环结束结尾语句,如下面的示例所示。

一个极其简单的索引.php文件将如下所示:

<?php(电话)获取页眉();如果(have_posts()):while(have_posts()):post();内容();endwhile;其他:_e('对不起,没有符合您条件的帖子。','textdomain');endif;get_sidebar();get_footer();?>

循环可以显示什么

Loop可以为每个帖子显示许多不同的元素。例如,一些常见的模板标记在许多主题中使用的是:

您还可以使用条件标记,例如:

  • is_home()–如果当前页面是主页,则返回true
  • is_admin()–如果在管理屏幕内,则返回true,否则返回false
  • 是单个(_S)–如果页面当前显示单个帖子,则返回true
  • is_page()–如果页面当前显示单个页面,则返回true
  • is页面模板()–可用于确定页面是否使用特定模板,例如:is_page_template('about-page.php')
  • 是_类别(_)–如果页面或帖子具有指定类别,则返回true,例如:is_category(“新闻”)
  • is_tag()–如果页面或帖子具有指定标记,则返回true
  • is_author()–如果在作者的存档页面内,则返回true
  • is_search()–如果当前页面是搜索结果页面,则返回true
  • is_404()–如果当前页面不存在,则返回true
  • has_excert()–如果文章或页面有摘录,则返回true

示例

让我们看一下循环的一些示例:

基本示例

博客存档

大多数博客都有一个博客存档页面,可以显示许多内容,包括文章标题、缩略图和摘录。下面的示例显示了一个简单的循环,该循环检查是否有帖子,如果有,则输出每个帖子的标题、缩略图和摘录。如果不存在帖子,则在括号中显示消息。

<?php(电话)如果(have_posts()):while(have_posts()):post();标题(“<h2>”,“</h2>”);post_thumbnail();_except();endwhile;其他:_e('对不起,没有符合您条件的帖子。','textdomain');endif;?>

个人岗位

在WordPress中,每个帖子都有自己的页面,显示该帖子的相关信息。模板标记允许您自定义要显示的信息。

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

<?php(电话)如果(have_posts()):while(have_posts()):post();标题(“<h1>”,“</h1>”);内容();endwhile;其他:_e('对不起,没有符合您条件的页面。','textdomain');endif;?>

中间示例

不同类别的文章风格

下面的示例做了几件事:

  • 首先,它显示每个帖子及其标题、时间、作者、内容和类别,与上面的单个帖子示例类似。
  • 接下来,它可以使用类别(_category)模板标记。

本例中的代码注释提供了循环每个阶段的详细信息:

<?php(电话)//启动循环。如果(have_posts()):while(have_posts()):post();/**查看当前职位是否属于第3类。*如果是,div将被赋予CSS类“post-category-three”。*否则,div将被赋予CSS类“post”。*/如果(在类别(3)中):?><div class=“后三类”><?php其他:?><div class=“post”><?php-endif;//显示帖子的标题。标题('<h2>',';</h2>');//显示此帖子作者的其他帖子链接。printf(__('由%s发布','textdomain'),get_the_author_posts_link());//在div中显示文章的内容。?><div class=“entry”><?php the_content()?></div><?php(电话)//显示文章类别的逗号分隔列表。_e('发布于','文本域');类别(',');//用“post”或“post-cat-three”类关闭第一个div框?></div><?php(电话)//停止循环,但允许出现“如果没有发布”的情况endwhile;其他:/**第一个“如果”测试是为了查看是否有帖子*显示。这个“else”部分告诉我们如果没有的话该怎么办。*/_e('对不起,没有符合您条件的帖子。','textdomain');//完全停止循环。endif;?>

多个循环

在某些情况下,可能需要使用多个循环。例如,您可能希望在页面顶部的内容列表中显示帖子的标题,然后再向下显示内容。由于查询没有被更改,所以当我们需要再次遍历帖子时,只需要倒回循环。为此,我们将使用函数倒带文章().

使用rewind_posts

你可以使用倒带文章()循环通过相同的再次查询。如果要在页面上的不同位置显示同一查询两次,这将非常有用。

下面是一个示例倒带文章()使用中:

<?php(电话)//启动主回路如果(have_posts()):while(have_posts()):post();标题();endwhile;endif;//使用rewind_posts()再次使用查询。倒带posts();//开始新循环while(have_posts()):post();内容();endwhile;?>

创建辅助查询和循环

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

<?php(电话)//主查询。如果(have_posts()):while(have_posts()):post();标题();内容();endwhile;其他://找不到帖子时,输出此文本。_e('对不起,没有符合您标准的帖子。');endif;wp_reset_postdata();/**第二个查询。请注意,您可以在此处使用任何类别名称。在我们的例子中,*我们使用“示例-类别”。*/$secondary_query=新WP_query('category_name=example-category');//第二个循环。if($secondary_query->have_posts())echo“<ul>”;while($secondary_query->have_posts()):$secondari_query->the_post();标题('<li>','</li>');endwhile;echo“</ul>”;endif;wp_reset_postdata();?>

正如您在上面的示例中看到的,我们首先显示一个常规循环。然后我们定义一个新变量工作包查询(_Q)以查询特定类别;在我们的案例中,我们选择了示例-类别段塞。

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

  1. 通过使用倒带文章()功能;
  2. 通过创建新的查询对象。

重置多个回路

在模板中使用多个循环时,重置它们很重要。由于数据在全球的$帖子变量。根据调用方式的不同,有三种重置循环的主要方法。

使用wp_reset_postdata

使用wp_reset_postdata()当您使用运行自定义或多个循环时工作包查询(_Q)。此函数用于还原全局$帖子变量设置为主查询中的当前帖子。如果您遵循最佳实践,这是您将用于重置循环的最常见功能。

要正确使用此函数,请将以下代码放在带有工作包查询(_Q):

<?php wp_reset_postdata();?>

下面是一个使用工作包查询(_Q)用重置wp_reset_postdata().

<?php(电话)//定义每页三篇文章的示例参数。$args=数组('posts_per_page'=>3);//用于调用WP_Query的变量。$the_query=新WP_query($args);if($the_query->have_posts())://启动循环while($the_query->have_posts()):$the_query->the_post();标题();_exercert();//结束循环endwhile;其他://如果没有与此查询匹配的帖子,请输出此文本。_e('对不起,没有符合您条件的帖子。','textdomain');endif;wp_reset_postdata();?>

使用wp_reset_query

使用wp_reset_query()恢复工作包查询(_Q)和全球$帖子数据到原始主查询。必须如果您使用查询_帖子()在你的循环中。可以在自定义循环后使用工作包查询(_Q)因为它实际上会呼叫wp_reset_postdata()当它运行时。然而,最好使用wp_reset_postdata()包含任何自定义循环工作包查询(_Q).

查询_帖子()不是最佳实践尽可能避免。因此,您不应该对wp_reset_query().

要正确使用此函数,请将以下代码放在带有查询_帖子().

<?php wp_reset_query();?>