WordPress主題開發入門指南:從零開始構建你嘅第一個主題

3分鐘閱讀
2026-03-11
2026-06-03
2,615
當你透過以下連結購物,我會獲得佣金,對你嚟講冇額外成本。.

準備工作同環境配置

喺開始寫代碼之前,你需要一個合適嘅開發環境。本地開發環境可以令你喺唔影響線上網站嘅情況下進行測試同除錯。推薦使用 XAMPP、MAMP 或者 Local by Flywheel 呢啲集成軟件包,佢哋可以一鍵安裝 Apache、MySQL/MariaDB 同 PHP。

確保你嘅 PHP 版本喺 7.4 或者以上,呢個係 WordPress 官方推薦嘅最低版本。同時,你需要一個代碼編輯器,例如 Visual Studio Code、Sublime Text 或者 PHPStorm,佢哋可以提供語法高亮同代碼提示功能,大大提升開發效率。

建立 WordPress 主題嘅基礎結構

一個 WordPress 主題本質上係一個喺 wp-content/themes/ 目錄下嘅文件夾。呢個文件夾嘅名就係你嘅主題標識符,建議使用細楷字母、數字同連字號,而且唔可以有空格。例如,你可以建立一個名為 my-first-theme 嘅文件夾。

喺呢個文件夾入面,至少需要兩個核心文件:style.css 同埋 index.phpstyle.css 唔單止係樣式表,佢更重要嘅作用係提供主題嘅元信息,呢啲信息會喺 WordPress 後台嘅「外觀」->「主題」頁面顯示。

編寫主題信息頭

style.css 喺文件嘅頂部,你需要加一個特定嘅註釋塊嚟定義主題資訊。呢個係一個示例:

UltaHost WordPress 主機
30日退款保證,無限頻寬同數據庫,免費DDoS防護,買3年優惠50%
/*
Theme Name: My First Theme
Theme URI: https://example.com/my-first-theme/
Author: Your Name
Author URI: https://example.com/
Description: 一个简洁、轻量级的入门级 WordPress 主题,用于学习主题开发。
Version: 1.0.0
License: GPL v2 or later
Text Domain: my-first-theme
*/

其中,Text Domain 用於國際化(多語言支援),佢必須同你嘅主題文件夾名稱一致。index.php 文件就係主題嘅默認模板文件,係所有頁面嘅後備模板。最初,你可以先喺入面寫啲簡單嘅HTML結構嚟測試。

核心模板文件同模板層次結構

WordPress 使用一套名为“模板层次结构”的规则来决定对于特定的页面请求,应该使用哪个模板文件来渲染。理解这个结构是主题开发的关键。其核心思想是:WordPress 会从最具体的模板文件开始寻找,如果找不到,则回退到更通用的文件,最终回退到 index.php

推薦閱讀 WordPress 主題開發入門:從零開始構建你嘅第一款自訂主題

常用模板文件及其用途

  • header.php: 网站的页头部分,通常包含 `` 区域、网站标识和主导航。
  • footer.php: 网站的页脚部分,通常包含版权信息、辅助链接等。
  • sidebar.php: 侧边栏区域。
  • index.php: 主模板,作為所有頁面嘅最終後備。
  • single.php: 用嚟顯示單篇博客文章。
  • page.php: 用于显示单个页面(如“关于我们”、“联系”)。
  • archive.php: 用于显示文章归档列表(如分类、标签、作者、日期归档)。
  • front-page.php: 用于定义网站首页(如果设置了一个静态页面作为首页)。
  • home.php: 用于显示博客文章索引页(如果设置了静态首页,这个模板显示最新的文章列表)。
  • 404.php: 用于显示“404 未找到”错误页面。
  • search.php: 用嚟顯示搜尋結果。
  • functions.php: 这不是一个模板文件,而是主题的功能文件,用于添加功能、注册菜单、侧边栏等。

模板標籤同循環

在模板文件中,你会频繁使用“模板标签”。这些是 WordPress 提供的 PHP 函数,用于输出动态内容,如 bloginfo('name') 輸出網站標題,the_title() 输出文章标题。

最核心的概念是“WordPress 循环”。它是一个 PHP 代码结构,用于检查当前页面是否有文章(或文章列表)需要显示,并循环输出它们。一个最基本的循环如下:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <div class="entry-content">
        <?php the_content(); ?>
    </div>
<?php endwhile; else : ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.', 'my-first-theme' ); ?></p>
<?php endif; ?>

这段代码的意思是:如果有文章,就循环(while)每一篇,在循环中显示文章标题和内容;如果没有文章,则显示一条错误信息。`_e()` 是一个用于国际化的翻译函数。

主題功能同樣式整合

functions.php 是你的主题的“大脑”,所有不属于模板渲染的核心功能都应在此添加。这个文件在主题初始化时被自动加载。

注册主题功能

functions.php 中,你可以通过 WordPress 提供的各种“钩子”(Hooks,如动作钩子和过滤器钩子)来扩展功能。首先,通常需要声明主题对某些功能的支持。例如,添加文章缩略图(特色图像)和菜单支持:

hosting.com 共享主機
高效能,配備 AMD EPYC 處理器、NVMe SSD 儲存同 LiteSpeed,提供全天候專業內部支援,採用先進安全措施,包括 SSL、暴力破解、惡意軟件同 DDoS 防護,可節省高達 73%。
<?php
function my_first_theme_setup() {
    // 让主题支持文章和页面使用“特色图像”
    add_theme_support( 'post-thumbnails' );

// 注册导航菜单位置
    register_nav_menus( array(
        'primary' => __( 'Primary Menu', 'my-first-theme' ),
        'footer'  => __( 'Footer Menu', 'my-first-theme' ),
    ) );

// 让 WordPress 管理文档标题标签
    add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'my_first_theme_setup' );
?>

`add_action()` 将你的函数 my_first_theme_setup 掛上WordPress嘅 after_setup_theme 这个动作钩子上,确保它在合适的时机执行。

引入樣式同腳本

现代主题应该将样式表(CSS)和 JavaScript 文件正确地通过 wp_enqueue_style() 同埋 wp_enqueue_script() 函数加入队列,而不是直接在模板文件中写 `` 或 `` 标签。这样做的好处是管理依赖、避免重复加载、并遵循 WordPress 的最佳实践。

function my_first_theme_scripts() {
    // 引入主样式表
    wp_enqueue_style( 'my-first-theme-style', get_stylesheet_uri() );

// 引入自定义 JavaScript 文件
    wp_enqueue_script( 'my-first-theme-navigation', get_template_directory_uri() . '/js/navigation.js', array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'my_first_theme_scripts' );

`get_stylesheet_uri()` 指向你的 style.css 文件,`get_template_directory_uri()` 返回当前主题目录的 URL。

推薦閱讀 WordPress主題開發入門指南:從零開始構建你嘅自訂主題

构建页面布局与模板部件

一个标准的网页通常由页头、主体内容和页脚组成。WordPress 鼓励你将可重用的部分拆分成独立的文件,然后在主模板中通过特定的函数引入。

拆開模板部件

創建 header.phpfooter.php 同埋 sidebar.php。喺 header.php 中,你需要包含完整的 `` 部分,并以一个明显的头部容器(如 `` 标签)结束。在 footer.php 中,通常以 `` 和 `` 标签结束。

InterServer 共享主機
共享主機:每月1TB,只需£2.50;首月只需£0.10,使用優惠碼 tryinterserver。461個雲端應用程式腳本,一鍵安裝。

组装完整页面

在页面模板(如 index.phpsingle.php)中,你可以使用以下函数来引入这些部件:

<?php get_header(); ?>

<main id="primary" class="site-main">
    <?php
    // 这里放置 WordPress 循环
    if ( have_posts() ) :
        while ( have_posts() ) : the_post();
            // 内容输出
        endwhile;
    endif;
    ?>
</main>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

`get_header()`、`get_sidebar()` 和 `get_footer()` 会分别加载对应的模板文件。你还可以使用 `get_template_part()` 函数来加载更细粒度的模板部件,例如 `get_template_part( 'template-parts/content', 'page' );` 会尝试加载 template-parts/content-page.php 文件,如果不存在则加载 template-parts/content.php。呢樣嘢大大提升咗代碼嘅重用性同埋可維護性。

摘要

从零开始构建一个 WordPress 主题是一个系统性的学习过程。你首先需要建立正确的本地开发环境并理解主题的基础文件结构。核心在于掌握 WordPress 的模板层次结构,它决定了不同内容如何被渲染。通过 functions.php 文件,你可以为主题添加强大的功能和特性,并遵循最佳实践来管理样式与脚本。最后,通过将页面拆分为页头、页脚、侧边栏等模板部件,并使用 WordPress 提供的函数将它们组装起来,你可以创建出结构清晰、易于维护的主题代码。遵循这些步骤,你不仅能够创建出你的第一个主题,更能为未来开发更复杂、更专业的项目打下坚实的基础。

推薦閱讀 WordPress 主題開發入門:從零開始打造你嘅第一個自訂主題

常見問題

開發 WordPress 主題係咪一定要掌握 PHP 呀?

是的,PHP 是 WordPress 的核心编程语言。主题的模板文件(如 index.phppage.php)同功能檔案(functions.php)都是 PHP 文件。你需要掌握 PHP 的基础语法、条件判断、循环以及函数的使用,才能动态地输出和操作 WordPress 中的数据。

主题开发中,`page.php` 和 `front-page.php` 有什么区别?

page.php 用于渲染 WordPress 中创建的单个“页面”(Page),例如“关于我们”、“联系方式”等。而 front-page.php 是专门用于渲染网站“首页”的模板。在 WordPress 后台的“设置”->“阅读”中,如果你选择“一个静态页面”,并将“首页”设置为某个页面,那么 WordPress 就会优先使用 front-page.php 来显示这个页面。如果 front-page.php 不存在,则会使用 page.php

为什么推荐使用 `wp_enqueue_style()` 来加载 CSS,而不是直接在 HTML 中写 `` 标签?

使用 wp_enqueue_style() 是 WordPress 官方推荐的方法。它能确保样式表只被加载一次,即使多个插件或主题部分引用了同一个文件。它可以方便地处理样式表的依赖关系(例如,你的样式依赖于某个基础框架)。此外,它还能与缓存和插件更好地兼容,并允许子主题轻松地覆盖父主题的样式。

點樣可以令我嘅主題支援多語言(國際化)?

让主题支持多语言主要涉及两个步骤。首先,在主题的所有文本字符串中,使用 WordPress 的翻译函数,如 ()_e()esc_html(),同埋為佢哋指定喺 style.css 入面定義 Text Domain。例如:_e( 'Hello World', 'my-first-theme' )。其次,使用 Poedit 这类工具,扫描你的主题代码,生成 .pot 模板文件,翻譯人員可以根據呢個創建唔同語言嘅 .po 同埋編譯好嘅 .mo 檔案。將語言檔案放喺主題嘅 /languages/ 目录下,WordPress 会根据网站的语言设置自动加载对应的翻译。