03 模板、Loop 与条件判断

掌握模板输出、主循环、自定义查询、条件标签和模板片段。

03 模板、Loop 与条件判断

本页关键词

The Loop WP_Query get_template_part is_page template hierarchy

学习目标

代码使用提醒

本页代码适合用于学习和研究。复制到正式网站前,请先备份,并优先在测试环境验证。

涉及用户输入、后台保存、接口请求、删除操作和邮件发送时,要同时考虑权限、nonce、sanitize、validate 和 escape。

1. 标准 Loop 输出文章

基础
<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <article <?php post_class(); ?>> <h2><?php the_title(); ?></h2> <div><?php the_excerpt(); ?></div> </article> <?php endwhile; ?> <?php else : ?> <p>暂无内容。</p> <?php endif; ?>
主循环用于输出当前页面查询结果。

2. 自定义 WP_Query 输出 3 篇文章

基础
<?php $query = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => 3, 'post_status' => 'publish', ) ); if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); the_title( '<h3>', '</h3>' ); endwhile; wp_reset_postdata(); endif;
自定义查询结束后必须 wp_reset_postdata()。

3. 按分类 slug 查询文章

实用
<?php $news = new WP_Query( array( 'category_name' => 'company-news', 'posts_per_page' => 6, ) );
category_name 使用分类 slug,不是分类显示名称。

4. 条件判断:不同页面输出不同内容

实用
<?php if ( is_front_page() ) { echo '<p>这里是首页。</p>'; } elseif ( is_page( 'contact' ) ) { echo '<p>这里是联系页面。</p>'; } elseif ( is_single() ) { echo '<p>这里是文章详情页。</p>'; }
条件标签适合控制模板中的局部差异。

5. 拆分模板:get_template_part

实用
<?php // 加载 template-parts/card-product.php get_template_part( 'template-parts/card', 'product' ); // 传递参数,WordPress 5.5+ 支持 args get_template_part( 'template-parts/card', 'product', array( 'label' => 'Featured', ) );
模板片段可以提高复用性,减少重复代码。

6. 模板中安全输出自定义字段

安全
<?php $subtitle = get_post_meta( get_the_ID(), '_subtitle', true ); if ( $subtitle ) { echo '<p class="subtitle">' . esc_html( $subtitle ) . '</p>'; }
从数据库取出的内容也要根据输出位置进行转义。

本页总结

模板开发的核心是 Loop、WP_Query、条件标签和模板拆分。掌握这些后,就能改造多数 WordPress 前台结构。