WordPress主题开发 — 模版循环(条件判断、多个循环、新建查询和文章循环)

这篇具有很好参考价值的文章主要介绍了WordPress主题开发 — 模版循环(条件判断、多个循环、新建查询和文章循环)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        循环是 WordPress 通过主题模板文件输出文章的默认机制 。在循环中,WordPress 遍历当前页面获取到的所有文章,然后使用主题中的模版标签将其格式化并输出。

我们可以用 WordPress 循环来做很多事情,例如:

  • 在网站首页显示多个文章模块
  • 在文章详情页面显示内容和评论
  • 在侧边栏中显示最新文章或热门文章
  • 显示指定文章类型或分类方法中的数据
  • 根据指定的条件获取数据并显示在文章模块中

循环细节

循环的基本使用方法如下。

<?php 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        // 显示文章内容
    endwhile; 
endif; 
?>

上面的代码首先判断是否有循环,如果有,则逐个显示循环中的内容。

  • have_posts() 函数检查当前页面是否有文章。 
  • 只要括号中的条件逻辑为真, while 循环就会继一直执行下去。 

使用文章循环

循环应放在 index.php或其他用来显示文章的模板中。因为我们不想在每个文章中都显示网站页头,所以循环代码应该放在 get_header() 之后。

<?php 
get_header();

// 循环代码从这里开始
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        // 显示文章内容
    endwhile; 
endif; 
?>

如以上代码所示,循环必须以 if 和 while 语句开头,以 endwhile 和 endif 语句结束。用以显示文章内容的模版标签必须在循环开始语句和结束语句中间。

如果当前页面没有文章,我们可以显示一个 404 错误信息,这个信息必须放在 endwhile 和 endif 语句之间 ,如下所示。

这是一个非常简单的 index.php 文章。

<?php
get_header();

if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        the_content();
    endwhile;
else :
    _e( '抱歉,未找到您需要的文章。', 'textdomain' );
endif;

get_sidebar();
get_footer();
?>

可以在文章循环中显示什么

我们可以在循环中使用模版标签显示各种文章内容、文章自定义字段,下面是一些常用的模版标签:

  • next_post_link():显示在当前文章之后 发布的文章的链接
  • previous_post_link()– 显示在当前文章之前发布的文章的链接
  • the_category():显示当前文章所在的分类
  • the_author():显示文章作者
  • the_content():显示文章正文内容
  • the_excerpt():显示文章摘要
  • the_ID():显示文章或页面 ID
  • the_meta():显示文章或页面的自定义字段
  • the_shortlink():显示文章的短链接
  • the_tags():显示文章所包含的标签
  • the_title():显示文章标题
  • the_time():显示文章发布时间

显示文章的时候,我们可以使用条件标签控制文章是否在满足某种条件的情况下显示。

示例

下面让我们看一些 WordPress 循环的真实使用示例。

基本示例

文章列表页

大多数网站都有文章列表页面,在列表页面中,我们可以显示这个列表中所有文章的标题、缩略图、摘要、分类等信息。下面的示例是一个简单的列表页面,示例代码首先检查是否有文章,如果有,显示文章标题、缩略图、摘要,如果没有,则显示提示消息。

<?php 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        the_title( '<h2>', '</h2>' ); 
        the_post_thumbnail(); 
        the_excerpt();
    endwhile; 
else: 
    _e( '抱歉,未找到您需要的文章。', 'textdomain' ); 
endif; 
?>
文章详情页

在 WordPress 中,每个文章都有自己的详情页面,我们可以使用模版标签在这个页面上显示文章的各种信息。

在下面的示例中,模版循环显示了文章的标题和内容,除此之外,我们还可以显示文章正文、文章作者、发表时间等信息。

<?php 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        the_title( '<h1>', '</h1>' ); 
        the_content();
    endwhile; 
else: 
    _e( '抱歉,未找到您需要的文章。', 'textdomain' ); 
endif; 
?>
为某个分类中的文章显示不同的内容和样式

我们来看一下模版示例,在这个示例中:

  • 首先,显示每篇文章的标题、发布时间、作者、正文和分类。
  • 然后,我们利用判断函数 in_category() 来为分类 ID 为 3 的文章显示不同的样式。 
<?php
// 开始循环
if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        // 判断文章是否在分类 3 中,如果是,添加 CSS 类 "post-category-three". 否则,添加 CSS 类 "post".
        if ( in_category( 3 ) ) : ?>
            <div class="post-category-three">
        <?php else : ?>
            <div class="post">
        <?php endif; 

            // 显示文章标题
            the_title( '<h2>', ';</h2>' ); 

            // 显示该文章作者存档的链接
            printf( __( '作者 %s', 'textdomain' ), get_the_author_posts_link() );

            // 显示文章内容
            ?>
            <div class="entry">
                <?php the_content() ?>
             </div>
    
            <?php
            // 显示逗号分隔的文章分类
            _e( '文章分类 ', 'textdomain' ); the_category( ', ' ); 

        // 关闭 div
       ?>
       </div>

    <?php 
    // 结束循环,下面是没有文章时显示的内容
    endwhile; 

else :
    // 如果没有文章,显示提示消息
     _e( '抱歉,未找到您需要的文章。', 'textdomain' );
 
// 结束判断和循环
 endif;
?>

主循环

主循环是 WordPress 中的一个非常重要的概念,在开始学习多个循环之前,我们首先需要了解一下什么是主循环。

当我们访问 WordPress 站点的时候,WordPress 会根据我们访问的页面为我们新建一个文章查询和循环,设置一个 $wp_query 全局变量。这个变量就是主循环数据的变量,我们可以直接在页面模版中循环这个数据来输出文章。

看一下下面的代码:

if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        the_title();
    endwhile;
endif;

为了说明主循环,我们稍微改写一下代码。

if ( $wp_query->have_posts() ) : 
    while ( $wp_query->have_posts() ) : $wp_query->the_post();
        the_title();
    endwhile;
endif;

两段代码是等效的,为了保持代码的简洁性,WordPress 隐藏了全局的主循环变量 $wp_query

多个循环

在某些情况下,我们可能需要使用多个循环。例如,我们可能需要在页面顶部的内容列表中显示文章标题,然后在页面下方显示文章内容。因为我们使用的是同一个循环,我们只需要在开始第二次循环之前重置循环即可,使用函数 rewind_posts() 即可实现这个功能。

使用 rewind_posts() 函数重新开始循环

我们可以使用 rewind_post() 函数让循环从循环中的第一个元素重新开始,当我们需要在一个页面中循环同一个查询时,这个函数非常有用。

这下面是一个rewind_posts() 示例 :

<?php
// 开始第一次循环
if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        the_title();
    endwhile;
endif;

// 使用 rewind_posts() 重置循环
rewind_posts();

// 开始第二次循环
while ( have_posts() ) : the_post();
    the_content();
endwhile;
?>

新建查询和文章循环

如上面的代码所示,我们可以非常容易的循环同一个查询结果两次或多次,但是很多时候,这不是我们所需要的。有时候我们需要在一个页面上显示不同的文章,例如,我们需要在页面的左侧显示所有文章,右侧显示分类「example-category」中的文章。这种情况下,我们需要新建一个文章查询,然后循环这个新的文章查询结果,示例代码如下:

<?php
// 显示所有文章
if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        the_title();
        the_content();
    endwhile;
else :
    _e( '抱歉,未找到您需要的文章。' );
endif;
wp_reset_postdata();                                                        

// 创建一个新的文章查询,获取分类 「category_name」中的文章。
$secondary_query = new WP_Query( 'category_name=example-category' );        

// 循环新的查询结果
if ( $secondary_query->have_posts() )
    echo '<ul>';
    while ( $secondary_query->have_posts() ) : $secondary_query->the_post();
        the_title( '<li>', '</li>' );
     endwhile;
     echo '</ul>';
endif;
wp_reset_postdata();
?>

如上例所示,我们首先显示主循环中的结果。然后,使用 WP_Query 类查询指定分类中的文章。

请注意,上面示例中的第二个循环和主循环还有一个区别:后者调用了 wp_reset_postdata() 函数来重置文章数据。

重置多个文章循环

在循环中,文章数据是存储在 $post全局变量中的,在循环结束时,我们需要重置这个全局变量,否则会导致一些难以调试的 Bug 。根据循环调用的方式,有三个函数可以用来重置循环。

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

使用 wp_reset_postdata() 重置文章数据

使用 WP_Query 新建自定义循环或使用了多个循环时,请使用 wp_reset_postdata() 来重置文章数据,这个函数将全局变量 $post 变量还原到主查询中的当前帖子。如果我们在进行 WordPress开发时遵循了最佳实践,该函数是用来重置循环的最常见函数。

建议在使用了 WP_Query 类新建了查询和循环时,都要使用 wp_reset_postdata() 函数重置文章数据。

下面是使用 WP-Query 类新建了查询和循环后,使用 wp_reset_postdata() 还原文章数据的示例代码。

 <?php 
// WP_Query 所使用的参数 
$args = array( 'posts_per_page' => 3 ); 

// 调用 WP_Query 新建文章查询. 
$the_query = new WP_Query( $args ); 

if ( $the_query->have_posts() ) : 
    // 开始循环
    while ( $the_query->have_posts() ) : $the_query->the_post(); 
        the_title(); 
        the_excerpt(); 
    // 结束循环
    endwhile; 
else: 
    _e( '抱歉,未找到您需要的文章。', 'textdomain' ); 
endif; 

wp_reset_postdata(); 
?> 

使用 wp_reset_query() 重置主循环和文章数据

因为 query_posts()query_posts()query_posts() 函数新建的循环是一个主循环,在使用了这个函数新建查询后,我们必须使用 wp_reset_query() 来还原查询和文章数据。如果使用了WP_Query 新建查询,我们可以使用 wp_reset_query() 函数来还原文章数据(因为该函数已经调用了 wp_reset_postdata() 函数),但是最好的做法是使用 wp_reset_postadata 函数来还原使用 WP_Query 新建的文章循环。文章来源地址https://www.toymoban.com/news/detail-647740.html

到了这里,关于WordPress主题开发 — 模版循环(条件判断、多个循环、新建查询和文章循环)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA2022版教程上(下载、卸载、安装、新建Project、jdk设置、详细设置、新建/导入/删除普通java模块、修改模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)

    初学Java语言,熟悉了记事本、EditPlus、NotePad++或Sublime Text3等简易开发工具的Java初学者 熟练使用其他Java集成开发环境(IDE),需要转向IDEA工具的Java工程师们 关注IDEA各方面特性的Java程序发烧友、爱好者 【注】JetBrains官方说明: 尽管我们采取了多种措施确保受访者的代表性

    2024年02月07日
    浏览(43)
  • 【Flutter 开发实战】Dart 基础篇:条件循环表达式

    Dart 是一门强大的编程语言,其条件和循环表达式在编写灵活、高效代码中起着关键作用。本文将深入介绍 Dart 中的条件表达式、循环表达式、以及如 for 、 while 、 do...while 、 break 、 continue 等内容,旨在为初学者提供清晰的指导。 Dart 中的条件表达式主要通过 if 语句

    2024年02月01日
    浏览(42)
  • 图片类主题TOB主题1.0_WordPress主题

    WordPress tob主题是一款基于WordPress程序的专业图片类主题,在图片展示上做了很多工作,扁平化设计、自适应响应式布局、多设备支持、强大的主题功能配置,希望tob主题可以开启图片站新时代。 tob主题1.0版本更新内容: 新增首页置顶文章,默认开启无需设置,置顶标记文字

    2024年02月07日
    浏览(30)
  • WordPress主题Zing V2.2.1/模块化WordPress响应式通用企业商城主题

    WordPress主题Zing V2.2.1,模块化WordPress响应式通用企业商城主题。 功能介绍 百度熊掌号文章实时推送、原创保护 多设备支持自适应布局,支持电脑、Pad、手机以及各种浏览器 SEO优化首页、文章、页面、分类均支持自定义标题、和描述 速度优化图片和头像lazyload异步加载

    2024年02月11日
    浏览(32)
  • Vault主题 - UiCore多用途Elementor WordPress主题

    你可以使用Vault主题 – UiCore多用途Elementor WordPress主题构建什么? Vault主题拥有专业、像素级完美且干净的现代布局,几乎适合您需要的任何网站: 小型企业网站 企业网站 着陆页面 权威博客 销售和营销页面 网上商店 自由职业者的最佳选择 当谈到设计的可用性、美观性和总

    2024年02月12日
    浏览(31)
  • Ohio主题 - 创意组合和代理机构WordPress主题

    Ohio主题是一个精心制作的多用途、简约、华丽、多功能的组合和创意展示主题,具有敏锐的用户体验,您需要构建一个现代且实用的网站,并开始销售您的产品和服务。它配备了最流行的WordPress页面构建器 WPBakery Page Builder(以前称为 Visual Composer)插件和用于主题设置的ACF

    2024年02月12日
    浏览(24)
  • WordPress导航主题源码

    源码说明: V2.0406 添加搜索自动索引百度热搜 添加首页tab标签模式加载方式切换(ajax加载和普通加载)(首页设置) 修复tab标签ajax加载模式会显示未审核的网址的bug 小屏幕热搜采用水平滚动 优化子主题支持 添加文章分页 添加解决WordPress 429的服务(优化加速) 优化、拆分

    2024年02月10日
    浏览(33)
  • 怎么移除WordPress后台工具栏“新建”菜单?如何添加“新建文章”菜单?

    默认情况下,WordPress后台顶部管理工具栏有左侧有一个“+新建”菜单,而且还有下拉菜单文章、媒体、链接、页面和用户等,不过我们平时用得最多的就是“新建文章”,虽然可以直接点击“+新建”,或点击“新建 – 文章”,但是总感觉有点复杂。 我们能不能将整个“+新

    2024年01月24日
    浏览(41)
  • 易服客工作室:Pixwell主题 – 现代杂志/WordPress新闻主题

    Pixwell 主题 是一个强大、多用途和现代的 WordPress杂志主题 ,具有像素完美的设计、出色的功能、完全响应和移动友好。它非常灵活,非常适合食谱、时尚、旅行、技术、个人或任何其他很棒的杂志和博客网站。 该主题与 Elementor、Cooked(食谱插件)、WooCommerce、Contact Form 7、

    2024年02月13日
    浏览(27)
  • Newsprk Newspaper新闻报纸WordPress主题

    Newsprk Newspaper新闻报纸WordPress主题对于任何使用 WordPress 技术构建的新闻和杂志网站来说都是一个有吸引力且时尚的主题。Newsprk – 报纸 WordPress 主题非常适合任何新闻/杂志或与以下类别匹配的任何特定业务,如博客、体育、时尚、科学、足球、政治、视频、旅行、风格、美

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包