WordPress主題開發終極指南:從零到一建立你嘅第一個自訂主題

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

準備工作同環境搭建

喺開始寫程式碼之前,一個穩定又高效嘅本地開發環境係好緊要嘅。咁樣唔單止可以令你離線工作,仲可以避免喺線上伺服器直接操作帶嚟嘅風險。首先,你需要安裝一個本地伺服器環境,例如 XAMPP、MAMP 或者更專業嘅 Local by Flywheel。呢啲工具會幫你配置好 Apache、MySQL 同 PHP,呢啲係運行 WordPress 嘅基礎。

跟住,你需要下載最新嘅 WordPress 核心檔案,同埋將佢安裝到本地伺服器入面。完成基本安裝之後,就可以開始創建你嘅主題目錄啦。所有 WordPress 主題都喺 /wp-content/themes/ 目錄下。請喺呢度創建一個新嘅資料夾,例如 my-first-theme。呢個資料夾嘅名就係你嘅主題標識。

一個有效嘅 WordPress 主題至少需要兩個核心文件:style.css 同埋 index.phpstyle.css 唔單止係樣式表,更加係一個主題嘅「身份證」,佢嘅文件頭註解包含咗主題嘅所有元信息。

推薦閱讀 打造專業網站:由零開始開發一個自訂WordPress主題嘅完整指南

主題樣式表文件頭信息

style.css 文件嘅開頭必須包含一段特定嘅 CSS 註解,用嚟向 WordPress 描述你嘅主題。呢啲信息會喺後台嘅「外觀」->「主題」管理頁面度顯示。

UltaHost WordPress 主機
30日退款保證,無限頻寬同數據庫,免費DDoS防護,買3年優惠50%
/*
Theme Name: 我的第一个主题
Theme URI: https://example.com/my-first-theme/
Author: 你的名字
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 使用一套叫做「模板層級」嘅智能系統,嚟決定為特定嘅頁面請求載入邊個模板文件。理解呢套規則係主題開發嘅核心。簡單嚟講,當用戶訪問一個頁面嗰陣,WordPress 會按照從最特定到最通用嘅順序,搵對應嘅模板文件。

例如,當訪問一篇 ID 為 5 嘅博客文章時,WordPress 會依次搵:single-post-5.php -> single-post.php -> single.php -> singular.php -> 最後先係 index.php。如果搵到匹配嘅檔案,就會用佢;否則,會繼續向下搵。

創建文章單頁模板

single.php 係用嚟顯示單篇博客文章嘅標準模板。喺呢個檔案入面,你會用一系列 WordPress 核心嘅模板標籤同函數嚟輸出文章內容。

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

<?php get_header(); ?>

<main id="primary" class="site-main">
    <?php
    while ( have_posts() ) :
        the_post();
        ?>
        <article id="post-<?php the_ID(); ?>" no numeric noise key 1008>
            <header class="entry-header">
                <h1 class="entry-title"><?php the_title(); ?></h1>
                <div class="entry-meta">
                    发布于: | 作者:
                </div>
            </header>
            <div class="entry-content">
                <?php the_content(); ?>
            </div>
            <footer class="entry-footer">
                &lt;?php the_tags(&#039;标签:&#039;, &#039;, &#039;, &#039;<br>'); ?&gt;
            </footer>
        </article>
        <?php
        // 输出上一篇、下一篇文章导航
        the_post_navigation();
    endwhile;
    ?>
</main>

呢個模板用咗 the_post() 嚟設定全局 $post 變數,然後透過 the_title()the_content() 等函數輸出文章數據。同時,佢引入咗模板部件:get_header(), get_sidebar(), get_footer()

創建頁面範本

page.php 模板用嚟顯示靜態頁面。佢嘅結構同 single.php 類似,但通常唔包含分類、標籤等典型嘅文章元數據。你可以根據需要創建更多特定頁面模板,例如為「關於我哋」頁面創建一個名為 page-about.php 嘅檔案,WordPress 會自動將其應用於標題或別名(slug)為「about」嘅頁面。

整合模板部件同導覽選單

為咗保持代碼嘅模組化同可重用性,WordPress 主題通常會將頁頭、頁腳、側邊欄等部分拆分成獨立嘅「模板部件」檔案。透過使用 get_template_part() 函數,你可以喺唔同模板度輕鬆引入呢啲部件。

hosting.com 共享主機
高效能,配備 AMD EPYC 處理器、NVMe SSD 儲存同 LiteSpeed,提供全天候專業內部支援,採用先進安全措施,包括 SSL、暴力破解、惡意軟件同 DDoS 防護,可節省高達 73%。

構建主題嘅頭部檔案

header.php 檔案包含咗 HTML 文檔嘅頭部( 區域)同網站頂部嘅可視部分,例如 logo 同主導航。

<!DOCTYPE html>
<html no numeric noise key 1010>
<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?php wp_head(); ?>
</head>
<body no numeric noise key 1007>
<?php wp_body_open(); ?>
<header id="masthead" class="site-header">
    <div class="site-branding">
        <?php
        if ( has_custom_logo() ) {
            the_custom_logo();
        } else {
            ?>
            <h1 class="site-title"><a href="/yue/</?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
            <p class="site-description"><?php bloginfo( 'description' ); ?></p>
            <?php
        }
        ?>
    </div>
    <nav id="site-navigation" class="main-navigation">
        'menu-primary',
                'menu_id'        =&gt; 'primary-menu',
                'container'      =&gt; false,
            )
        );
        ?&gt;
    </nav>
</header>

關鍵函數 wp_head() 容許 WordPress 核心、插件同其他腳本向頁面頭部加入必要嘅代碼(例如 CSS、JS 連結)。wp_nav_menu() 函數用於輸出一個已註冊嘅導航菜單。

註冊導航菜單位置

導航菜單需要先喺主題度「註冊」位置,用戶先可以喺後台嘅「外觀」->「菜單」度分配菜單。呢個通常喺主題嘅 functions.php 檔案入面完成。

推薦閱讀 從零開始學習WordPress主題開發:打造個人化網站的完整指南

function my_first_theme_setup() {
    // 注册一个主导航菜单
    register_nav_menus(
        array(
            'menu-primary' => esc_html__( '主导航', 'my-first-theme' ),
            'menu-footer'  => esc_html__( '页脚导航', 'my-first-theme' ),
        )
    );
    // 支持自定义Logo
    add_theme_support( 'custom-logo' );
    // 支持文章和评论的 RSS feed 链接
    add_theme_support( 'automatic-feed-links' );
    // 支持标题标签功能
    add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'my_first_theme_setup' );

register_nav_menus() 函數註冊咗兩個菜單位置。透過 add_theme_support() 函數,我哋啟用咗自訂 Logo、標題標籤等特性,呢個係現代 WordPress 主題開發嘅標準做法。

主題功能與樣式進階

functions.php 文件係你嘅主題「控制中心」,用嚟加功能、改預設行為、載入腳本同樣式表。佢同插件嘅作用差唔多,但係專門用喺你嘅主題度。

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

安全地引入樣式同腳本

正確嘅樣式同腳本載入方式係用 wp_enqueue_style() 同埋 wp_enqueue_script() 功能,並將佢哋安裝到 wp_enqueue_scripts 呢個動作掛鉤上面。

function my_first_theme_scripts() {
    // 引入主样式表
    wp_enqueue_style( 'my-first-theme-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );
    // 引入自定义 JavaScript 文件
    wp_enqueue_script( 'my-first-theme-navigation', get_template_directory_uri() . '/js/navigation.js', array(), wp_get_theme()->get( 'Version' ), true );
}
add_action( 'wp_enqueue_scripts', 'my_first_theme_scripts' );

呢個方法確保依賴關係正確,而且避免重複載入。函數 get_stylesheet_uri() 返回主 style.css 嘅 URL,而 get_template_directory_uri() 返回主題目錄嘅 URL。

創建側邊欄小工具區域

小工具區域(Sidebar)容許用戶透過後台拖拽嘅方式自訂內容區塊。註冊一個小工具區域同樣喺 functions.php 中完成。

function my_first_theme_widgets_init() {
    register_sidebar(
        array(
            'name'          =&gt; esc_html__( '主侧边栏', 'my-first-theme' ),
            'id'            =&gt; 'sidebar-1',
            'description'   =&gt; esc_html__( '在此添加小工具。', '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' );

登記咗之後,你就可以喺 sidebar.php 模板部件中使用 dynamic_sidebar( 'sidebar-1' ) 個函數嚟輸出呢個區域啦。

摘要

呢本指南有系統咁介紹 WordPress 主題開發嘅核心流程。由搭建本地開發環境、創建基本主題檔案,到理解同實現 WordPress 強大嘅模板層級系統,再到整合模板組件、註冊導航選單同小工具區域,最後喺 functions.php 度安全咁擴展主題功能。跟住呢啲步驟,你已經成功建立咗一個結構清晰、功能完整而且符合 WordPress 編碼標準嘅自訂主題。呢個為你日後開發更複雜、功能更豐富嘅主題奠定咗穩固嘅基礎。記住,主題開發係一個持續學習嘅過程,不斷實踐同參考官方文件係提升技能嘅關鍵。

常見問題

### 乜嘢係 WordPress 模板層級?
模板層級係 WordPress 用來決定唔同類型頁面用邊個模板文件嘅一套規則。佢係一個從具體到通用嘅查找順序。例如,對於一篇特定嘅文章,WordPress 會優先搵同該文章ID或文章類型匹配嘅特定模板,如果搵唔到,就逐級退返去更通用嘅模板,直到最後嘅 index.php。理解層級關係對於創建結構正確嘅主題至關重要。

點解必須要用 wp_enqueue_style 來加載樣式?

使用 wp_enqueue_style() 同埋 wp_enqueue_script() 係 WordPress 官方推薦嘅、標準化嘅資源加載方式。佢能夠正確處理依賴關係(例如確保 jQuery 喺自訂腳本之前加載),避免同一資源被重複加載,而且同緩存插件、子主題等生態系統良好兼容。直接喺模板文件度用 標籤係一種唔建議嘅做法。

functions.php 檔案同插件有咩分別?

functions.php 檔案係主題嘅一部分,佢嘅功能會隨住主題啟動而啟動,亦會隨住轉換主題而失效。佢主要係用嚟增加同呢個主題視覺效果同功能密切相關嘅特性。而插件提供嘅功能通常獨立於主題,就算轉換主題,插件嘅功能都依然存在。一般嚟講,如果某個功能同主題嘅樣式或者佈局有好大關係,可以擺喺 functions.php;如果佢係通用功能,就更加適合做成插件。

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

要令主題支援多語言,即係國際化(i18n),主要涉及以下幾個步驟:首先,喺 style.css 嘅頭部同所有 load_theme_textdomain() 調用中正確設定 Text Domain。其次,喺 functions.php 中調用 load_theme_textdomain() 函數嚟指定語言檔案目錄。最後,亦都係最關鍵嘅一步,喺主題嘅所有 PHP 模板檔案同 functions.php 入面,對所有面向用戶嘅字串使用 WordPress 嘅翻譯函數進行包裝,例如 esc_html__( ‘文本’, ‘my-first-theme’ )_e( ‘文本’, ‘my-first-theme’ )。完成之後,可以用 Poedit 呢類工具生成 .pot 模板檔案,俾翻譯人員創建唔同語言嘅 .po 同埋 .mo 檔案。