iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
WordPress

從 0 到 100:WordPress 開發者的實戰手冊系列 第 16

Day 16 - 佈景主題設計實戰 (8) 提交上架前的準備事項

  • 分享至 

  • xImage
  •  

當我們花費上百小時以上,精心設計一個全新的佈景主題,並興致勃勃地想要上架到 WordPress 的官方佈景主題目錄,然而在線上排隊等待審核小組進行檢查的主題很多,可能要等待一個星期以上才有回音,結果收到的結果是駁回申請,或者請我們修正審核結果信件中提到需要被修正的事項,又要等上一段時間。

與其讓官方審核小組駁回、再修正,如此一來一往的無謂等待,不如我們一次把該注意的事項做到好,一次就上架成功吧!

準備事項

1. 編寫 readme.txt

WordPress 辨識佈景主題的版本資訊是掃描 style.css 檔案並分析內容的檔頭註解,而官方的佈景主題目錄判斷版本資訊是根據 readme.txt 這個檔案。

readme.txt

內容的編排格式很像 Markdown,它是 WordPress 的獨特格式,用來解析佈景主題的資訊。支援的段落標題和欄位的標記名稱如下:

標記名稱 標題層級 說明
Theme Name 1 佈景主題名稱。
Contributors 開發者的 WordPress.org 使用者名稱。
Requires at least 所需的最低 WordPress 版本。
Requires PHP 所需的最低 PHP 版本。
Tested up to 已測試的 WordPress 版本。
Stable tag 穩定版本標籤。
License 版權許可證。
License URI 版權許可證連結。
Tags 和佈景主題相關的標籤。
Description 2 佈景主主題的描述。
Installation 2 安裝說明。
Changelog 2 修改日誌。
Copyright 2 版權說明。
Upgrade Notice 2 升級的注意事項。
Frequently Asked Questions 2 常見問題解答。
Screenshots 2 截圖說明。

標題的層級和 Markdown 相反,最大的為 === ,相當於 h1, == 次之,相當於 h2,再來是 =,相當於 h3。

其中最重要的資訊在第一個段落,除了最後三個是外掛專用,不用填寫,其它必填。

Stable tag 為目前的最新的版本。WordPress 用這個欄位來判斷是否觸發更新提示。如果想要測試更新,把這個值調低,經過和官方目錄的版號比對不同,就會出現更新提示。

特別注意

  • Requires at least :限制 WordPress 最低可使用這個佈景主題的版本。我們必須盤點好設計的過程中用的函式,如果有較新版本的 WordPress 才有,則必須調整相對應的版本。
  • Requires PHP :最低支援的 PHP 版本。

以上兩個欄位務必準確,以免使用這下載並啟用之後,發生 PHP Fatal 級別的錯誤。

2. 盤點版權聲明

在整個佈景主題中有使用到的圖片、字型、JavaScript 等程式片段,有用到第三方提供,非本人自創的部分則必須條列在 readme.txt 並詳列授權條款。如果使用上述檔案但盤點時確遺漏掉,則會被審核小組退件哦。

版權聲明陳列在 readme.txt 中的 Copyright 段落中。

3. 準備首頁縮圖

準備 1200 x 900 長寬尺寸的圖片,格式為 png。這個比例換算為 4:3,它會出現在後台的外觀設定,佈景主題的列表中。

4. 程式碼安全檢查

在 HTML 中,只要是輸出字串的地方都要使用過濾字串的 WordPress 函式,常見的函式如下。

函式名稱 說明
esc_html 轉換特定字元為 HTML 實體,主要用於在 HTML 元素內部過濾文本內容。
esc_html__ 與 esc_html 類似,但支援國際化。
esc_html_e 直接輸出 esc_html 的結果。
esc_html_x 與 esc_html 類似,不過參數提供情境,方便翻譯者辨識為動詞或名詞等等,以提高翻譯的準確度。
esc_attr 轉換特定字元為 HTML 實體,主要用於 HTML 元素的屬性值。
esc_attr__ 與 esc_attr 類似,但支援國際化。
esc_attr_e 直接輸出 esc_attr 的結果。
esc_attr_x 和 esc_attr 類似,不過參數提供情境,方便翻譯者辨識為動詞或名詞等等,以提高翻譯的準確度。
esc_url 用於過濾 URL。
esc_js 用於 JavaScript 中的字串。
esc_textarea 用於 HTML 的 <textarea> 元素中的內容。

例:

<span class="page-description search-term">' . esc_html( get_search_query() ) . '</span>

在搜尋頁面,使用者的輸入結果會印在網頁上,由於使用者會輸入什麼無法預料,基於安全性的理由,使用 esc_html 函式要將非法字元都過濾掉。

例:

<input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'ironman' ); ?>" />

在 HTML 的屬性中,使用 esc_attr_x 函式來過濾非法字元。

5. 確認函式前綴字

在佈景主題中的每一個函式,都要加上前綴字,例如 ironman。此規範可以避免和內建的 WordPress 函式及其它外掛程式中的函式發生「撞名」而發生錯誤。

6. 避免使用非佈景主題功能

不能使用和佈景主題無關的功能,例如註冊 post_type ,這應該是在外掛裡做的事,而不是在佈景主題去註冊一個新的文章分類。

7. 確認版權連結

頁尾的版權連結的目標網頁必須是該佈景主題的介紹頁面或 DEMO 站,否則不會通過審核。

8. 移除不相關的檔案

和佈景主題無關的檔案都必須移除,例如 .git.vscodenode_modules 等目錄。提交審核之前務必確定類似的檔案及目錄都有排除。

上架

在前一段落提到的是常常會被審核小組退回的原因,可以參考佈景主題檢視 一文,有更詳細的說明。

當檢查無誤後,把整個目錄打包為 zip 檔,依版號命名。例如:

ironman-1.0.0.zip

接著前往佈景主題上傳網頁:

上傳網頁
圖:WordPress 佈景主題提交頁面

點擊下方的「Upload Your Theme」。一開始會經過自動程式檢查,這個步驟通過後,才會進到審核的程序。

總結

當您想要將精心設計的佈景主題上架到 WordPress 官方目錄之前,務必檢查本篇文章提到的要點,確保一次成功,以減少等待審核的時間。

首先,編寫完整的 readme.txt,確保裡面的版本資訊、版權聲明等都正確。圖片、字型和程式碼的版權也必須明確,並提供正確的首頁縮圖。程式碼必須要確保所有變數的輸出都使用相對應的過濾函式進行過濾字串。佈景主題的函式要有前綴字。不能提供非佈景主題相關的額外功能。頁尾的版權連結要和佈景主題有直接的相關性,並刪除不相關的檔案。

佈景主題設計實戰系列到這邊告一段落,設計一個佈景主題需要花費上百小時來調整、測試,達到自己滿意才上架,因此在鐵人賽期間要同時完成是不可能達成的。筆者預估完成時間為 2023 年 11 月 15 日,為鐵人賽結束後一個月,想知道進度如何,歡迎加入筆者的臉書專頁喔。

臉書專頁
圖:Terry 的臉書專頁(URL


課後思考:

為什麼所有在 HTML 中輸出的字串都需要進行過濾?此舉對於網站的安全性有什麼影響?

前篇解答參考:

自訂器允許使用者在前台進行即時預覽佈景主題的更改,這為佈景主題設計提供了高度的彈性。我們可以提供不同頁面的佈局,例如 2 欄式、 3 欄式。側邊欄的位置在左邊,或者在右邊。字型的選擇,也可以讓使用者選用 Google 字型,還是正黑體、標楷體等等。不過提供的項目設定越多,面板的分類就要規劃好,讓使用者可以直覺地找到相關的設定項目,以提高使用者的體驗哦。


上一篇
Day 15 - 佈景主題設計實戰 (7) 設計主題自訂器
下一篇
Day 17 - WordPress 的 AJAX 設計與應用
系列文
從 0 到 100:WordPress 開發者的實戰手冊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言