準備工作同環境搭建
喺開始寫程式碼之前,一個穩定又高效嘅本地開發環境係好緊要嘅。咁樣唔單止可以令你離線工作,仲可以避免喺線上伺服器直接操作帶嚟嘅風險。首先,你需要安裝一個本地伺服器環境,例如 XAMPP、MAMP 或者更專業嘅 Local by Flywheel。呢啲工具會幫你配置好 Apache、MySQL 同 PHP,呢啲係運行 WordPress 嘅基礎。
跟住,你需要下載最新嘅 WordPress 核心檔案,同埋將佢安裝到本地伺服器入面。完成基本安裝之後,就可以開始創建你嘅主題目錄啦。所有 WordPress 主題都喺 /wp-content/themes/ 目錄下。請喺呢度創建一個新嘅資料夾,例如 my-first-theme。呢個資料夾嘅名就係你嘅主題標識。
一個有效嘅 WordPress 主題至少需要兩個核心文件:style.css 同埋 index.php。style.css 唔單止係樣式表,更加係一個主題嘅「身份證」,佢嘅文件頭註解包含咗主題嘅所有元信息。
推薦閱讀 打造專業網站:由零開始開發一個自訂WordPress主題嘅完整指南。
主題樣式表文件頭信息
style.css 文件嘅開頭必須包含一段特定嘅 CSS 註解,用嚟向 WordPress 描述你嘅主題。呢啲信息會喺後台嘅「外觀」->「主題」管理頁面度顯示。
/*
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">
<?php the_tags('标签:', ', ', '<br>'); ?>
</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() 函數,你可以喺唔同模板度輕鬆引入呢啲部件。
構建主題嘅頭部檔案
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' => 'primary-menu',
'container' => false,
)
);
?>
</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 文件係你嘅主題「控制中心」,用嚟加功能、改預設行為、載入腳本同樣式表。佢同插件嘅作用差唔多,但係專門用喺你嘅主題度。
安全地引入樣式同腳本
正確嘅樣式同腳本載入方式係用 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' => esc_html__( '主侧边栏', 'my-first-theme' ),
'id' => 'sidebar-1',
'description' => esc_html__( '在此添加小工具。', 'my-first-theme' ),
'before_widget' => '<section id="%1$s" class="widget %2$s">',
'after_widget' => '</section>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</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 檔案。
下一步應該點做?
延伸閱讀及實用知識
以下內容與本文主題相關,適合進一步閱讀。一般而言,最好由與你目前問題最緊密相關的文章開始,然後逐步擴展到周邊主題。