WordPress 主题开发:从入门到提交审核

这份指南是为你揭开 WordPress 主题开发面纱的实战手册。它不堆砌术语,而是从官方审核标准出发,告诉你一个能上线官方目录的主题长什么样、需要哪些文件、代码该怎么写。无论你是想为自己网站打造独一无二的外观,还是计划提交主题到官方目录,这篇文章都会给你一份清晰的路线图。读完它,你会理解主题的骨架(模板文件)、大脑(functions.php)和身份证(style.css),以及官方审核到底在卡什么。


为什么要在意那些审核规则?

WordPress 官方主题目录不是仓库,想放什么就放什么。它有一套严格的审核标准,目的不是为难开发者,而是保证用户下载的每一个主题都安全、规范、能用。

你可能会想:我只是给自己做个主题,不打算提交,管它什么审核规则?

注意:即使你不打算提交,遵循这些规则也是好习惯。它能让你的代码更健壮,更容易维护,也更容易与插件协作。说白了,这是 WordPress 社区沉淀下来的“佳实践”。

主题的“三件套”:每个主题都必须有的东西

一个能被 WordPress 识别的主题,至少需要两个文件:style.css 和 index.php。但一个能通过审核的主题,通常还少不了三个:functions.php。

1. 身份证:style.css

这个文件不只是管样式的。它顶上的那段注释,是 WordPress 识别你主题的“身份证”。

text

/*
Theme Name: 你的主题名字
Theme URI: 你的主题主页
Author: 你的名字
Author URI: 你的网站
Description: 一句话描述你的主题
Version: 1.0
License: GPL v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: 你的主题文本域名
*/

WordPress 后台“外观 > 主题”里显示的信息,全是从这里读的。注意几点:

  • 主题命名:名字里不能出现“WordPress”或“Theme”字样,但“WP”可以用。
  • 授权协议:必须声明采用 GPL 或兼容协议,这是 WordPress 生态的铁律。
  • Text Domain:这是翻译用的,后面 functions.php 里也要对应上。

2. 骨架:模板文件与 The Loop

index.php 是基本的模板文件,也是所有模板的“后防线”。当 WordPress 找不到更具体的模板时,就会用它。

模板文件的核心是 The Loop(主循环)。它是 WordPress 用来从数据库拉取内容并显示在页面上的机制。

这是一个简的 index.php 例子:

php

<?php get_header(); ?>

<main>
    <?php if ( have_posts() ) : ?>
        <?php while ( have_posts() ) : the_post(); ?>
            <article>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                <div><?php the_content(); ?></div>
            </article>
        <?php endwhile; ?>
    <?php else : ?>
        <p>没有找到文章</p>
    <?php endif; ?>
</main>

<?php get_footer(); ?>

这段代码做了几件事:

  1. 引入页眉文件(get_header())和页脚文件(get_footer())。
  2. 检查是否有文章(have_posts())。
  3. 循环输出每一篇文章的标题和内容。

3. 大脑:functions.php

这个文件在主题初始化时自动加载,你可以把它理解为给主题“注入超能力”的地方。

重要的功能之一是用正确的方式引入 CSS 和 JavaScript 文件。注意:千万不要直接在 header.php 里用 <link> 标签硬编码,要用 wp_enqueue_scripts 钩子来“排入”。

php

<?php
// functions.php

// 主题初始化
function my_theme_setup() {
    // 启用特色图片功能
    add_theme_support( 'post-thumbnails' );
    // 启用自动订阅链接
    add_theme_support( 'automatic-feed-links' );
    // 注册导航菜单
    register_nav_menus( array(
        'primary' => '主菜单',
    ) );
}
add_action( 'after_setup_theme', 'my_theme_setup' );

// 引入 CSS 和 JS
function my_theme_scripts() {
    // 引入主样式表
    wp_enqueue_style( 'my-theme-style', get_stylesheet_uri() );
    // 引入一个 JS 文件
    wp_enqueue_script( 'my-theme-script', get_template_directory_uri() . '/js/script.js', array(), '1.0', true );
}
add_action( 'wp_enqueue_scripts', 'my_theme_scripts' );
?>

为什么必须用 wp_enqueue_scripts? 因为这样 WordPress 才能统一管理所有资源的加载顺序,避免插件和主题的 JS/CSS 互相冲突。

审核究竟卡什么?那些必须过的硬门槛

根据官方的审核要求,以下几条是硬性的,少了任何一条主题都可能被拒。

1. 必须存在的模板文件

  • style.css:必须有,且头部信息完整。
  • index.php:必须有。
  • comments.php:评论模板。你可以用 WordPress 默认主题里的 comments.php 作为起点。
  • screenshot.png:主题的缩略图,尺寸建议 1200×900,要能真实反映主题的样子。

2. 必须调用的钩子

在 header.php 的 </head> 标签之前,必须加上 <?php wp_head(); ?>。
在 footer.php 的 </body> 标签之前,必须加上 <?php wp_footer(); ?>。

这两个钩子是给插件用的。少了任何一个,插件可能无法正常工作,审核必挂。

3. 必须支持的 WordPress 功能

  • 自动订阅链接:在 functions.php 里加上 add_theme_support( 'automatic-feed-links' );。
  • 文章缩略图:加上 add_theme_support( 'post-thumbnails' );。
  • 小工具支持:需要注册侧边栏(register_sidebar())。
  • 导航菜单:需要用 register_nav_menus() 注册菜单位置,并用 wp_nav_menu() 在模板中调用。

4. 主题宽度的声明

如果你的主题定义了内容宽度,需要在 functions.php 中声明 $content_width 变量。

php

if ( ! isset( $content_width ) ) {
    $content_width = 640; // 单位是像素
}

这个值会影响嵌入的 oEmbed 内容(比如 YouTube 视频)的尺寸。

总结

WordPress 主题开发说穿了就是三个核心文件加上一套规则。style.css 是身份证明,index.php 是内容展示的骨架,functions.php 是注入功能的大脑。而官方的审核标准,其实就是一套公认的“佳实践清单”,它确保你的主题既不会破坏 WordPress 的运行机制,也不会给用户带来安全隐患。

理解了这些基础,再去查阅官方的《Theme Developer Handbook》,你会发现那些英文文档不再晦涩难懂,因为它们讲的底层逻辑,你已经懂了。