18 mins read2022/07/26

WordPress 主題結構解析,以 astra 為例 – ./wp-content/themes/astra


Astra 是什麼?

前情提要: WordPress 專案目錄結構解析 – ./wp-content/themes

我們上篇提到 themes 的摘要是

直接翻譯:Astra 主題

不一定會有這個檔案,是因為我安裝了 Astra 這個主題,所以才有這個檔案

⚠️ 有”子主題”的時候,有時候也會把原主題稱為”母主題”

 

astra theme
Astra 是個非常熱門,也適合新手入門的主題,支援多款頁面編輯器

但我們今天的重點不會介紹 Astra ,而是介紹頁面結構上

astra structure
你的 Astra 主題結構應該會長得像這樣

 

Astra 目錄 / 資料夾 解析

⭐ 是比較常見的

目錄名稱 說明
📁assets⭐ Astra 大部分的靜態資源檔案

通常會有 CSS, Javascript, Font, Image 等檔案

⚠️ 每個 主題 / 套件 目錄裡面基本上都會有這個目錄

⚠️ 有些特別大的專案會再各別拆出不同目錄底下的靜態資源檔

📁inc Astra 核心檔案

裡面通常會有 Astra 的核心業務邏輯、函式定義、類定義

⚠️通常只要叫 inc, includes 的檔案,就是核心檔案,基本上 主題 / 套件 大部分都會有,名稱可能不同

📁languages Astra 多國語系檔

裡面通常會有 .pot.po

⚠️ 不見得每個主題都會有這個資料夾,通常會有

📁template-parts 直接翻譯:部分版型

裡面放的是部分版型,通常會被切成好幾個部分⚠️ 經常與 get_template_part 搭配使用,可是其實並不強制要把目錄命名為 template-parts 這個名子

⚠️ 不見得每個主題都會有這個資料夾

 

Astra 主題檔案解析

⭐ 是做客製化時,比較常用的,認真說,做客製化,應該是每個檔案都會用到🤣

基本上,主題檔案根目錄底下的 php 檔案,除了 functions.php 之外,全部都是版型檔案

檔案名稱 說明
404.php 404版型

你輸入的 url 找不到時,會使用這個版型

archive.php⭐ Archive 彙整頁板型

Archive 中文翻譯叫做彙整,WordPress 中的 Archive 指得像是文章的文章分類彙整頁文章標籤彙整頁 ( TAG頁 )、日期彙整頁 ( ex: 2022年所有的文章頁 )、作者彙整頁 ( Author 頁,ex: 某某作者發布的所有文章頁 )、等…

⚠️ 您可以創建例如 category.php, tag.php, author.php  等 php 文檔,覆寫掉原本的Archive 彙整頁板型,創建專屬於文章分類彙整頁文章標籤彙整頁作者彙整頁的版型

⚠️ 在 WordPress 中,針對不同的 post_type ,您可以指定不同的 post_type 套用不同的 Archive 彙整頁版型,例如常見的電商套件 Woocommerce 中,產品就是一種 post_type ( post_type=product ),Woocommerce 有為產品做了一個預設的 彙整頁版型 ( 路徑:  /wp-content/plugins/woocommerce/templates/archive-product.php )

changelog.txt Astra 主題的更新紀錄檔

純文字檔案,基本上就是紀錄每個版本的主要變更,可以刪除🗑️

comments.php 留言板版型

如果你的網站有啟用留言功能,這個檔案裏面就是留言板的功能與版型

footer.php⭐ Footer 版型
functions.php⭐ Functions.php 函式檔主題根目錄底下唯一一支不是版型的 php 檔案

基本上所有的函式定義相關HOOK使用都會寫在 functions.php 裡面

以 Astra 為例,因為功能太多,全部寫在 functions.php 裡面會難以維護,所以 Astra 將它的核心檔案額外寫在 📁inc 資料夾裡面,歸類管理,並讓 function.php 去引入 📁inc 裡面的檔案

⚠️ functions.php 是寫一個主題的最小必要文檔之一

⚠️ 此檔案是主題第一個被載入的檔案,優先於所有版型

header.php⭐ Header 版型
index.php 入口文件 / 預設版型

當你的主題裡面什麼版型都沒有的時候 ( 沒有 page.php, single.php, archive.php )時,預設會套用這個版型

⚠️ 如果你的網站將首頁指定為 “最新文章” , 而不是 “指定頁面” 時,就是吃這個版型

page.php⭐ 所有頁面的版型

你可能會覺得說,不對阿,我每個頁面都長不一樣阿,怎麼會是同一個版型!?

因為大部分的主題都有使用頁面編輯器,例如 Astra 就支援 Elementor, Beaver Builder,  Brizy, 區塊編輯器等…其他還有 Divi, Flatsome 等…原理都一樣,這些頁面編輯器會將內容都存在資料庫裏面並不是寫死在版型上的,所以你才可以做出每頁都不同樣子

⚠️ 您可以試試看,在 page.php 可以輸入 html 的地方,打一串純文字看看,然後看你的網頁是不是每頁都出現了一樣的文字

⚠️ 可以透過 page-{slug}.php 的方式,將版型套用到指定的文章上

⚠️ 例如你有一頁,關於我們的頁面,文章 slugabout ,你可以創建一個 page-about.php 來將此版型指定到關於我們這個頁面上

readme.txt 讀我檔案

純文字檔案,基本上就是 Astra 的使用須知,可以刪除🗑️

screenshot.jpg Astra 主題的縮圖

一個圖檔,就是你在後台選擇主題時看到的 Astra 縮圖,可以刪除🗑️

search.php 搜尋結果版型

當你在網站上搜尋時,跑出結果的畫面就是這個版型

searchform.php 搜尋表單版型

當你在網站上搜尋時,跳出一個搜尋框給你打字的,就是這個版型

sidebar.php 側欄版型
single.php⭐ Single 文章頁版型

⚠️ 可以透過 page-{post_type}.php 的方式,將版型套用到指定的文章類型

⚠️ 在 WordPress 中,針對不同的 post_type ,您可以指定不同的 post_type 套用不同的 Single 文章頁版型,例如常見的電商套件 Woocommerce 中,產品就是一種 post_type ( post_type=product ),Woocommerce 有為產品做了一個預設的 Single 文章頁 ( 只是大家都叫產品頁,但產品其實是一種文章類型 ) 版型 ( 路徑:  /wp-content/plugins/woocommerce/templates/single-product.php )

style.css Astra 主題的 CSS 樣式檔案

這邊寫的 CSS 預設會在 functions.php 中被引入 ( 你也可以修改 functions.php 來取消引入 )

⚠️ style.css 是寫一個主題的最小必要文檔之一

⚠️ 未必所有主要的 CSS 都會寫在這裡,也有可能會寫在 📁/assets/css 裡面

⚠️ ⚠️ ⚠️ 此文檔上方有一堆 CSS 註釋不可刪⚠️ ⚠️ ⚠️ ,不要以為那是一般的註釋,WordPress 會抓取裡面的註釋做為參數來判斷主題版本text-domain母主題等資訊

theme.json Astra 主題資料設定檔

⚠️ Astra 特有檔案,其他主題不會有此檔

toolset-config.json Astra 主題工具設定檔

⚠️ Astra 特有檔案,其他主題不會有此檔

wpml-config.xml Astra 主題整合 WPML 的 XML 檔

⚠️ Astra 特有檔案,其他主題不會有此檔

 

版型覆寫機制

上面在講版型時,講到了很多規則

例如

⚠️ 可以透過 page-{post_type}.php 的方式,將版型套用到指定的文章類型

 

這個就是 WordPress 覆寫機制 ( Override ) 的應用

這個的來源是來自 WordPress 官方文件中的 Template Hierarchy ( 版型的覆寫等級高低順序 )

template hierarchy
版型複寫的機制 & 順序

 

大家可以先參考這張圖,之後有空再來中文化詳細介紹😀

WordPress 絕大部分所有的主題結構,包含我使用的 Picostrap 也都是同樣的原則與概念

看到這篇,就已經踏入 WordPress 客製化開發的核心概念之一,另一個是 HOOK 的使用

你們已成功踏進 WordPress 開發領域的 第一步 !

覺得不錯的話,請給我點個推薦

您的支持與鼓勵是我們前進的最大動力!