基礎準備工作
在開始編寫程式碼之前,合適的環境和基礎的理解是成功的基石。首先,你需要一個本地開發環境。你可以選擇整合軟體包如 XAMPP、MAMP 或 Local by Flywheel,它們能快速為你配置好 PHP、MySQL 和 Web 伺服器。當然,也可以選擇更靈活的方式,在本地手動搭建環境。確保你的 PHP 版本在 7.4 或以上,MySQL 在 5.6 或以上。
接下來,你需要為你的自定義主題建立一個獨立的目錄。這個目錄必須位於 WordPress 安裝目錄的 wp-content/themes/ 資料夾下。例如,你可以建立一個名為 my-first-theme 的資料夾。一個 WordPress 主題只需要兩個檔案就能被系統識別:index.php 以及 style.css其中,style.css 不僅是樣式表,更包含了定義主題元資料的檔案頭,這是主題的“身份證”。
建立主題核心檔案
編寫主題樣式表頭
style.css 檔案的開頭必須是格式化的 CSS 註釋塊,其中包含了 WordPress 識別主題所需的所有資訊。這是每個主題必須正確配置的部分。
推荐阅读 從零到一:WordPress 主題開發完整指南與實戰教學。
/*
Theme Name: 我的第一个主题
Theme URI: https://example.com/my-first-theme/
Author: 你的名字
Author URI: https://yourwebsite.com
Description: 这是一个入门级的自定义 WordPress 主题,用于学习开发。
Version: 1.0.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
*/ 其中,“Text Domain”用於國際化,我們將在後面使用函式 __() 或者 _e() 來使主題中的文字支援多語言翻譯。
構建基本模板檔案
index.php 是主題的預設模板,也是最重要的回退模板。當 WordPress 找不到更具體的模板檔案(如 single.php每当需要获取用户的当前位置时,就会使用到它。这是一个最基本的功能。 index.php 應該包含 WordPress 的迴圈(The Loop),這是輸出文章內容的核心機制。
<!DOCTYPE html>
<html no numeric noise key 1022>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body no numeric noise key 1019>
<header id="site-header">
<h1><a href="/zh-tw/</?php echo esc_url( home_url( '/' ) ); ?>"></a></h1>
<p></p>
</header>
<main id="main-content">
<article id="post-<?php the_ID(); ?>" no numeric noise key 1011>
<h2><a href="/zh-tw/</?php the_permalink(); ?>"></a></h2>
<div class="entry-content">
</div>
</article>
<p><?php _e( '抱歉,没有找到任何文章。', 'my-first-theme' ); ?></p>
</main>
<footer id="site-footer">
<p>©</p>
</footer>
</body>
</html> 這個模板使用了多個核心 WordPress 函式,如 wp_head(), the_title(), the_content()函数 get_sidebar() 會嘗試載入一個名為 sidebar.php 的模板檔案。
實現模板層級與功能
WordPress 使用一套名為“模板層級”的規則來決定為特定頁面使用哪個模板檔案。理解這個層級是開發靈活主題的關鍵。例如,當訪問一篇部落格文章時,WordPress 會按順序查詢:single-post.php -> single.php -> singular.php -> index.php您可以通过创建这些特定文件来自定义不同页面的外观。
新增文章特色影象支援
現代主題通常支援“文章特色影象”(Post Thumbnail)。要啟用這個功能,你需要在主題的 functions.php 文件中使用了 add_theme_support() 函式。首先,在主題目錄下建立 functions.php 文件。
推荐阅读 实战指南:从零到精通WordPress主题开发的全面指南。
<?php
/**
* 我的第一个主题的功能函数文件
*/
if ( ! function_exists( 'my_first_theme_setup' ) ) :
function my_first_theme_setup() {
// 让 WordPress 管理标题标签
add_theme_support( 'title-tag' );
// 启用文章特色图像支持
add_theme_support( 'post-thumbnails' );
// 为文章和页面设置默认特色图像尺寸
set_post_thumbnail_size( 1200, 800, true );
// 注册一个导航菜单位置
register_nav_menus( array(
'primary' => __( '主导航菜单', 'my-first-theme' ),
) );
}
endif;
add_action( 'after_setup_theme', 'my_first_theme_setup' ); 引入樣式與指令碼檔案
正確地將 CSS 和 JavaScript 檔案加入佇列是 WordPress 開發的最佳實踐,它避免了資源衝突和重複載入。我們透過 wp_enqueue_style() 以及 wp_enqueue_script() 函式來實現。在 functions.php 中新增一個新的函式。
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 );
// 如果评论功能开启且有评论,加载评论回复脚本
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
}
add_action( 'wp_enqueue_scripts', 'my_first_theme_scripts' ); 主題進階與最佳實踐
一個完整的主題不僅僅是展示內容,還需要考慮可訪問性、效能和組織結構。將不同的頁面部分(如頁首、頁尾、側邊欄)分離到獨立的模板檔案中,可以使程式碼更易於維護。
分離頁首與頁尾模板
建立
(注:此处"建立"可能指某个组织、项目或机构的创立过程。) header.php 以及 footer.php 檔案。將 index.php 嗯,您能再说一遍吗?我没听清楚。 <body> 標籤之前的所有內容移到 header.php将 </body> 標籤之前的所有內容移到 footer.php接下来,将原来的
(此处可能缺少后续内容) index.php 精簡為:
<main id="main-content">
<article id="post-<?php the_ID(); ?>" no numeric noise key 1012>
<div class="post-thumbnail">
</div>
<h2><a href="/zh-tw/</?php the_permalink(); ?>"></a></h2>
<div class="entry-content">
</div>
</article>
<p><?php _e( '抱歉,没有找到任何文章。', 'my-first-theme' ); ?></p>
</main> 建立側邊欄模板
同樣地,建立一個 sidebar.php 檔案,並在其中使用動態側邊欄函式 dynamic_sidebar()首先,你需要在 上注册一个账户。 functions.php 请将下文翻译成中文,并详细说明翻译过程: register_sidebar() 函式註冊一個側邊欄小工具區域。
function my_first_theme_widgets_init() {
register_sidebar( array(
'name' => __( '主侧边栏', 'my-first-theme' ),
'id' => 'sidebar-1',
'description' => __( '在此添加小工具。', '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 中呼叫它:
<?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
<aside id="secondary" class="widget-area">
<?php dynamic_sidebar( 'sidebar-1' ); ?>
</aside>
<?php endif; ?> 总结
透過本文的步驟,你已經成功地從零開始構建了一個基礎但功能完整的 WordPress 自定義主題。你學會了建立核心檔案、理解模板層級、使用 functions.php 新增主題功能、以及遵循最佳實踐來組織和載入資源。這個主題具備了顯示文章、支援特色影象、註冊選單和側邊欄等基本功能。以此為起點,你可以繼續探索更復雜的模板檔案(如頁面模板、分類模板)、自定義文章型別、主題定製器 API 等,逐漸打造出功能強大、設計專業的 WordPress 主題。記住,實踐是學習的關鍵,嘗試修改程式碼並觀察變化,是鞏固知識的最佳方式。
推荐阅读 WordPress主题开发入门指南:从零开始创建自定义主题。
常见问题解答(FAQ)
我的主題在後臺不顯示怎麼辦?
請首先檢查你的主題資料夾是否放置在正確的 wp-content/themes/ 目錄下。然後,確認 style.css 檔案頂部的主題資訊頭(CSS 註釋)格式是否正確無誤,特別是 “Theme Name:” 這一行必須存在且格式正確。任何拼寫錯誤或格式問題都可能導致 WordPress 無法識別你的主題。
修改了 functions.php 檔案導致網站白屏怎麼辦?
“白屏故障”通常是由以下原因之一导致的: functions.php 檔案中存在語法錯誤(如缺少分號、括號)或致命錯誤導致的。最快速的解決方法是使用 FTP 或檔案管理器訪問你的伺服器,將出錯的 functions.php 重命名文件(例如,将其改名为) functions.php.bak这样一来,WordPress 就会忽略该文件,使网站恢复可访问性。之后,你可以检查并修正程序代码中的错误。
如何為我的主題新增頁面模板?
要建立一個自定義頁面模板,首先在你的主題目錄下新建一個 PHP 檔案,例如 template-fullwidth.php请在该文件的开头处添加以下特定的模板注释:
<?php
/**
* Template Name: 全宽页面
*/ 然後,你可以在這個檔案中編寫你的 HTML 和 PHP 程式碼,記得使用 get_header(), get_footer() 等函式。儲存後,在 WordPress 後臺編輯或建立頁面時,就可以在“頁面屬性”的“模板”下拉框中看到並選擇“全寬頁面”了。
主題開發中 get_template_part() 函式有什麼用?
get_template_part() 函式是 WordPress 主題開發中用於模組化程式碼的利器。它的作用是載入你主題中的一個特定模板部分。例如,在迴圈中,你可以用 get_template_part( 'content', get_post_format() ); 來載入 content.php 或更具體的如 content-video.php 檔案。這極大地提高了程式碼的複用性和可維護性,讓你能輕鬆地為不同型別的文章內容建立不同的顯示模板。
下一步,该怎么做呢?
延伸阅读与实用知识
下方列出的内容与本文主题相关,适合继续深入阅读。建议先从与你当前问题最相关的文章开始阅读,然后逐步扩展到相关主题,这样效果通常会更好。