创建 WordPress 子主题

您是否曾经直接在主题的 functions.php 中编辑 CSS 或添加代码?如果是,您可能遇到过这个痛苦的经历:主题更新时,您所有的自定义内容都被清除了。数小时的 CSS 工作,在您点击"更新"的瞬间化为乌有。

子主题(child theme)是解决这个问题的正确、符合 WordPress 标准的方案。本指南将解释什么是子主题、它的工作原理,以及如何从零开始创建一个 — 手动方式或通过插件。

切勿直接编辑父主题。对父主题文件所做的任何 CSS 或 PHP 更改,都会在下次主题更新时被覆盖。您所有的工作会立即消失,且无法恢复。

什么是 WordPress 子主题?

子主题是一个继承父主题所有内容的子级主题,但它将您的自定义内容存储在自己独立的文件中。这意味着当父主题更新时,您所有的更改都会被保留,因为更新只影响父主题的文件 — 而不是您的子主题。

工作原理:WordPress 首先加载子主题。如果在子主题中找不到所需的文件,它会回退到父主题。这让您只需覆盖需要更改的部分,而无需复制整个主题。

为什么在自定义之前必须创建子主题

有三个核心原因:

子主题文件结构

子主题在 /wp-content/themes/ 内的新文件夹中,最少需要两个文件:

/wp-content/themes/
  my-parent-theme/          ← 父主题(请勿编辑)
  my-parent-theme-child/    ← 我们的子主题
    style.css               ← 必需(头部信息 + 自定义 CSS)
    functions.php           ← 推荐(加载父主题 CSS)

手动创建子主题

第一步:创建新文件夹

使用 DirectAdmin 文件管理器或 FTP,在 wp-content/themes/ 内创建一个新文件夹。将其命名为类似 twentytwentyfive-child 的名称(如果您的父主题是 Twenty Twenty-Five)。

第二步:创建 style.css

在新文件夹中创建名为 style.css 的文件,内容如下:

/*
Theme Name: Twenty Twenty-Five Child
Template: twentytwentyfive
Description: Child theme of Twenty Twenty-Five
Author: Your Name
Version: 1.0
*/

/* 在此处添加您的自定义 CSS */

最重要的一行是 Template: — 它必须与父主题的文件夹名称完全匹配,包括大小写。

第三步:创建 functions.php

在子主题文件夹中创建 functions.php 文件,以便在子主题样式表之前正确加载父主题的样式表:

<?php
add_action( 'wp_enqueue_scripts', 'my_child_theme_enqueue_styles' );
function my_child_theme_enqueue_styles() {
    // 加载父主题样式表
    wp_enqueue_style(
        'parent-style',
        get_template_directory_uri() . '/style.css'
    );
    // 加载子主题样式表(覆盖父主题)
    wp_enqueue_style(
        'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array( 'parent-style' )
    );
}

注意:许多现代主题(使用 theme.json 的块主题)以不同方式加载 CSS。有些不需要手动为父主题调用 wp_enqueue_style。请务必查阅主题文档以确认正确的做法。

激活子主题

  1. 前往 WordPress 后台 → 外观 → 主题
  2. 您的新子主题将出现在列表中
  3. 点击子主题上的激活
  4. 您的网站外观完全不变 — 子主题从父主题继承了所有内容

使用插件创建子主题(Child Theme Configurator)

如果您不想手动创建文件,插件可以自动处理一切。

使用 Child Theme Configurator

  1. 安装免费插件 Child Theme Configurator(超过 40 万次活跃安装)
  2. 前往 工具 → Child Theme Configurator
  3. 选择您要使用的父主题
  4. 为子主题命名并设置选项
  5. 点击 Create Child Theme
  6. 插件会自动创建文件夹、style.css 和 functions.php,然后立即激活子主题

向子主题添加自定义 CSS

有两种方式添加自定义 CSS:

方式一:直接编辑 style.css

打开子主题中的 style.css,在注释头部之后添加 CSS:

/* 自定义 CSS */
.site-header {
    background-color: #059669;
}
.entry-title {
    font-size: 2rem;
    font-weight: 700;
}

方式二:WordPress 自定义工具

前往 外观 → 自定义 → 附加 CSS。这种方式更方便,但 CSS 存储在数据库中,而不是子主题文件中。

覆盖父主题模板文件

要更改页面布局 — 例如单篇文章模板 — 将模板文件从父主题复制到子主题文件夹中,然后在那里进行编辑。

# 示例:覆盖单篇文章模板
# 从父主题复制:
/wp-content/themes/twentytwentyfive/single.php

# 放入子主题中:
/wp-content/themes/twentytwentyfive-child/single.php

# 按需编辑子主题中的 single.php
# WordPress 会自动使用子主题版本

关键原则:只覆盖您实际需要更改的文件 — 而不是整个主题。复制所有内容会违背子主题的初衷,并让您失去父主题更新的好处。

向子主题 functions.php 添加函数

子主题的 functions.php 与父主题的并行运行 — 它不会替换父主题的。您可以安全地添加钩子、过滤器和自定义函数:

<?php
// 添加自定义统计脚本
add_action( 'wp_head', 'my_custom_analytics' );
function my_custom_analytics() {
    // 插入统计或任何自定义脚本
}

// 从单篇文章中移除侧边栏
add_filter( 'theme_mod_single_sidebar', '__return_false' );

// 注册自定义文章类型
add_action( 'init', 'register_my_custom_post_type' );
function register_my_custom_post_type() {
    // ...
}

在子主题中使用 theme.json(块主题)

自 WordPress 5.8 起,全站编辑(FSE)改变了主题控制样式和布局的方式。Twenty Twenty-Three、Twenty Twenty-Four 和 Twenty Twenty-Five 等块主题使用 theme.json 文件代替传统 CSS。这意味着块主题的子主题与经典子主题的工作方式略有不同。

在块主题子主题中,您可以创建自己的 theme.json 来覆盖父主题中定义的值。WordPress 会自动合并两个文件 — 子主题的值始终优先。一个常见用例是更改网站的主色调和排版:

{
  "$schema": "https://schemas.wp.org/trunk/theme.json",
  "version": 2,
  "settings": {
    "color": {
      "palette": [
        { "name": "Primary",    "slug": "primary",    "color": "#059669" },
        { "name": "Background", "slug": "background", "color": "#f0fdf4" }
      ]
    },
    "typography": {
      "fontSizes": [
        { "name": "Small",  "slug": "small",  "size": "14px" },
        { "name": "Normal", "slug": "normal", "size": "16px" },
        { "name": "Large",  "slug": "large",  "size": "20px" }
      ]
    }
  }
}

使用 theme.json 覆盖的优势在于,块编辑器会立即在编辑界面中反映您的自定义颜色和字体 — 无需编写冗长的 CSS 选择器,即可保持编辑器与实际网站同步。

注意:如果父主题是使用 theme.json 的块主题,在 functions.php 中手动加载父主题样式表可能是不必要的 — 甚至可能导致样式重复加载。请务必查阅父主题文档以确认子主题的正确做法。

子主题创建方式对比:手动、插件与 WP-CLI

创建子主题有三种主要方式,各自适合不同的情况:

方式 最适合 优势 注意事项
手动(style.css + functions.php) 希望完全掌控的开发者 无需额外插件;了解文件结构 容易拼错 Template 头部信息或加载顺序
插件(Child Theme Configurator) 非技术用户 一键设置;图形界面;不会拼写错误 需要安装插件;可能遗漏块主题的细节
WP-CLI 拥有 SSH 访问权限的开发者 最快速;可脚本化;可在多个网站重复使用 需要在虚拟主机服务器上安装 WP-CLI 和 SSH

对于没有 SSH 访问权限的共享主机用户,通过 DirectAdmin 文件管理器或 FTP 手动创建是完全可行的。只需创建两个文件即可开始使用。使用 WP-CLI 时,等效的单条命令为:

wp scaffold child-theme twentytwentyfive-child --parent_theme=twentytwentyfive --activate

常见错误及解决方法

子主题的设置相对简单,但在开始之前有一些常见问题值得了解:

调试技巧:如果激活子主题后网站崩溃,请打开无痕/隐私浏览窗口,前往"外观 → 主题"停用子主题。如果网站恢复正常,问题出在您的子主题文件中 — 而不是服务器或父主题。

长期备份与维护子主题

您的子主题文件夹保存了您对网站所做的所有自定义内容。如果因主机迁移失败、意外删除或服务器故障而丢失,您将失去所有工作成果。请遵循以下实践来确保其安全:

总结:子主题只需两个文件即可开始使用,但能为每个 WordPress 网站提供长期保护。如果您的网站目前在没有子主题的情况下运行,请立即创建一个 — 在下一次主题更新抹去您的心血之前。

支持完整文件访问的 WordPress 主机 — 低至 500 泰铢/年

AsiaGB 主机完全支持 WordPress 子主题,配备 DirectAdmin、SSD 存储、免费 SSL、文件管理器和 FTP 访问。起价 500 泰铢/年,无隐藏费用。

查看主机方案 →