掌握关键技巧:从零开始创建你的第一个 WordPress 主题

3 分钟阅读时间
2026-03-19
2026-06-04
2,813
當您透過下方連結購物時,我會獲得佣金,而您無需支付額外费用。.

開發環境與基礎文件準備

在開始編寫代碼之前,搭建一個穩定的本地開發環境是至關重要的。這能讓你在不影響線上網站的情況下進行測試。推薦使用如 Local by Flywheel、XAMPP 或 MAMP 等工具來快速建立一個包含 PHP 和 MySQL 的本地服務器環境。

接下來,你需要在 WordPress 安裝目錄的 wp-content/themes 文件夾內,爲你的主題創建一個新的文件夾,例如命名爲 my-first-theme。這個文件夾就是你的主題根目錄。然後,你必須創建兩個最基礎且必需的文件:style.css 以及 index.php

style.css 文件不僅是你的主題樣式表,更重要的是它包含了一個用 CSS 註釋編寫的主題信息頭部(Theme Header)。這個頭部是 WordPress 識別你主題的唯一憑據。

推荐阅读 零到一:WordPress主题开发全流程指南及实战技巧

/*
Theme Name: 我的第一个主题
Theme URI: http://example.com/my-first-theme/
Author: 你的名字
Author URI: http://example.com/
Description: 这是一个从零开始创建的 WordPress 主题示例。
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: my-first-theme
*/

index.php 是你的主題的主模板文件,也是 WordPress 查找模板時的最終備用文件。它至少應該包含 WordPress 核心的調用,以輸出頁面頭部、內容循環和頁腳。

UltaHost WordPress 主機
30天退款保證,無限帶寬與數據庫,免費的 DDoS 防護,購買3年優惠50%
<!DOCTYPE html>
<html no numeric noise key 1005>
<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
</head>
<body no numeric noise key 1002>
    
    
</body>
</html>

理解主題的模板層級

在創建其他模板文件之前,理解 WordPress 的模板層級(Template Hierarchy)是核心。它決定了 WordPress 爲不同類型的頁面(如首頁、文章頁、頁面、分類頁)選擇哪個模板文件來渲染。例如,當訪問一篇單獨的文章時,WordPress 會按順序尋找:single-post-{slug}.php -> single-post-{id}.php -> single.php -> singular.php -> index.php。掌握這個規則,你就能通過創建特定的文件(如 single.php 或者 page.php)來精確控制不同頁面的外觀。

構建主題的核心模板

一個完整的主題不應只有一個 index.php。爲了實現更好的代碼組織和複用,我們需要將頁面拆分爲多個部分,並通過函數引入。

分離頭部和頁腳

创建 header.php 文件,用於存放 HTML 文檔的頭部(DOCTYPE, <head> 部分,以及頁面主體的開頭部分,如網站標題和主導航)。相應地,創建 footer.php 文件,用於存放頁面底部的內容(如版權信息)和閉合標籤。

随后,他们前往附近的村庄,拜访了当地的居民,并与他们交谈,了解他们的生活状况和面临的挑战。 index.php 中,你就可以用 get_header() 以及 get_footer() 函數來引入它們,使結構更清晰。

推荐阅读 零基础学习WordPress主题开发:从无到有,打造你的第一个主题

創建側邊欄模板

如果主題需要側邊欄,可以創建 sidebar.php 文件,裏面使用 dynamic_sidebar() 函數來調用在小工具區域註冊的側邊欄。在主模板中,使用 get_sidebar() 函數來引入它。

實現文章循環與內容模板

文章循環是 WordPress 主題的心臟,它用於從數據庫中獲取並顯示文章。在 index.php 或者 single.php 中,我們使用標準循環結構。爲了更模塊化地控制文章在列表(如首頁、存檔頁)和單篇文章頁的顯示,可以創建 content.php 或分別創建 content-single.php 以及 content-excerpt.php

在循環內部,使用 get_template_part() 函數來調用這些內容模板文件,例如:get_template_part( 'content', get_post_format() );

hosting.com 共享主机
高性能配置,搭载 AMD EPYC 处理器、NVMe SSD 存储及 LiteSpeed 技术,提供全天候 24 小时专家内部支持,具备 SSL、暴力破解、恶意软件及 DDoS 防护等高级安全措施,节省成本高达 73%。

主題功能與樣式集成

一個優秀的主題不僅要有外觀,還要通過功能文件來增強其能力。

引入主題功能文件

创建 functions.php 文件。這個文件不是模板文件,但它是主題的“大腦”,用於添加主題功能、註冊菜單、側邊欄,以及引入腳本和樣式。它會在主題初始化時自動被 WordPress 加載。

在這個文件中,你可以使用 add_theme_support() 函數來啓用主題功能,例如文章縮略圖(Featured Image)、自定義標誌(Custom Logo)和 HTML5 標記支持。

推荐阅读 初学者到精通者:WordPress主题开发指南——打造个性化网站的核心攻略

function my_first_theme_setup() {
    // 添加文章和评论的 RSS feed 链接到 head
    add_theme_support( 'automatic-feed-links' );
    // 启用文章缩略图功能
    add_theme_support( 'post-thumbnails' );
    // 注册一个导航菜单位置
    register_nav_menus( array(
        'primary' => __( '主导航菜单', 'my-first-theme' ),
    ) );
}
add_action( 'after_setup_theme', 'my_first_theme_setup' );

註冊小工具區域

functions.php 请将以下英文文本翻译成中文,并详细解释翻译过程: 在中文中,使用 register_sidebar() 函數可以定義一個或多個小工具區域(Widget Areas),允許用戶在後臺“小工具”界面拖放組件。

function my_first_theme_widgets_init() {
    register_sidebar( array(
        'name'          =&gt; __( '主侧边栏', 'my-first-theme' ),
        'id'            =&gt; 'sidebar-1',
        'description'   =&gt; __( '在此添加小工具。', 'my-first-theme' ),
        'before_widget' =&gt; '<section id="%1$s" class="widget %2$s">',
        'after_widget'  =&gt; '</section>',
        'before_title'  =&gt; '<h2 class="widget-title">',
        'after_title'   =&gt; '</h2>',
    ) );
}
add_action( 'widgets_init', 'my_first_theme_widgets_init' );

正確加載樣式與腳本

永遠不要直接在模板文件中用 <link> 或者 <script> 標籤硬編碼引入 CSS 和 JavaScript 文件。正確的方法是在 functions.php 使用中文(简体) wp_enqueue_style() 以及 wp_enqueue_script() 函數,並掛載到 wp_enqueue_scripts 鉤子上。這確保了依賴關係正確,並避免重複加載。

InterServer 共享主机服务
共享主机每月价格为 $2.50 美元,首月优惠价为 $0.1 美元,优惠码为 tryinterserver,提供 461 个云应用脚本,可一键安装。
function my_first_theme_scripts() {
    // 加载主样式表
    wp_enqueue_style( 'my-first-theme-style', get_stylesheet_uri() );
    // 加载导航脚本,依赖 jQuery
    wp_enqueue_script( 'my-first-theme-navigation', get_template_directory_uri() . '/js/navigation.js', array('jquery'), '1.0', true );
}
add_action( 'wp_enqueue_scripts', 'my_first_theme_scripts' );

主題的國際化與發佈準備

實現主題翻譯

爲了讓你的主題能被全世界的用戶使用,國際化(i18n)是必要步驟。這意味着你需要將所有面向用戶的字符串用翻譯函數包裹起來。最常用的函數是 __()(用於在 PHP 中回顯翻譯)和 _e()(用於在 PHP 中輸出翻譯)。同時,在 style.css 的頭部和 functions.php 的加載函數中,需要正確設置文本域(Text Domain),例如我們之前設置的 my-first-theme

進行最終測試與壓縮

在發佈前,必須在不同環境(不同 PHP 版本、不同 WordPress 版本)和不同設備(桌面、平板、手機)上進行全面測試。檢查所有模板文件是否正常工作,功能是否按預期實現,以及是否符合 WordPress 官方的主題審覈標準。

最後,移除所有調試代碼和註釋(除非對用戶有幫助),並使用工具(如 CodeKit 或在線壓縮器)壓縮你的 CSS 和 JavaScript 文件以減少體積。將整個主題文件夾打包成 ZIP 文件,就可以準備提交到 WordPress.org 主題目錄或分發給用戶了。

总结

從零創建 WordPress 主題是一個系統性的學習過程,它涵蓋了從環境搭建、理解模板層級、構建核心模板文件,到通過 functions.php 集成高級功能的全流程。關鍵在於遵循 WordPress 的編碼標準和最佳實踐,例如使用內置函數、正確引入資源、實現國際化。通過動手實踐本文所述的步驟,你將不僅獲得一個可運行的主題,更能深刻理解 WordPress 主題工作的核心機制,爲開發更復雜、更專業的主題打下堅實基礎。

常见问题解答(FAQ)

創建主題必須掌握 PHP 嗎?

是的,深入掌握 PHP 是開發自定義 WordPress 主題的必備條件。因爲 WordPress 本身是用 PHP 編寫的,所有模板文件(如 index.php, single.php)和功能文件(functions.php)都直接使用 PHP 代碼來動態生成內容、調用數據庫和處理邏輯。沒有 PHP 知識,你將無法理解和操作主題的核心部分。

主題開發必須從零開始寫所有代碼嗎?

不一定。對於初學者,從零開始是極佳的學習路徑。但在實際工作中,開發者常常會使用“啓動主題”(Starter Theme)或“父主題”作爲基礎。例如,官方的 _Underscores (_s) 主題就是一個極簡的、符合編碼規範的高質量起點,它已經搭建好了基本的文件結構和常用函數,你可以在此基礎上進行定製開發,這能大大提高效率並確保代碼質量。

functions.php 文件出錯會導致什麼後果?

functions.php 文件中的語法錯誤或致命錯誤會導致 WordPress 站點出現“白屏死機”(White Screen of Death),即前端和後端管理界面都無法訪問。這是因爲該文件在主題加載初期就被執行。遇到這種情況,你需要通過 FTP 或主機文件管理器,將出錯的主題文件夾重命名或替換爲一個功能正常的主題(如 Twenty Twenty-Six),以恢復站點訪問,然後再去修復錯誤代碼。

如何讓我的主題支持古騰堡編輯器?

要讓主題更好地支持古騰堡(Gutenberg)區塊編輯器,首先應在 functions.php 使用中文(简体) add_theme_support( ‘editor-styles’ ) 來啓用編輯器樣式支持。然後,使用 add_editor_style() 函數將你的主題樣式表或一個專爲編輯器編寫的 CSS 文件引入到後臺編輯器中,這能確保用戶在編輯時看到的樣式與前端顯示儘量一致。此外,你還可以添加對寬對齊、顏色定製等塊功能的支持。