問題描述
有沒有一個容易理解的方案來決定什麼樣的程式碼屬於一個外掛或主題的 functions.php?
有關於該主題的 are many cases 和許多 debates,主要是因為對 WordPress 的內部工作有一些誤解。我根據事實要求一個答案,而不是意見。
它應該解釋如何處理這些問題 (或許更多):
- 定製帖子型別和分類
- 聯絡表格
- 短碼
- 自定義小工具
-
add_theme_support( 'automatic-feed-links' ); - SEO 功能像自定義
meta元素 - 主題開關
雙方往往有利弊。我們最受歡迎的問題 Best Collection of Code for your functions.php file 得到了很多程式碼片段作為至少有爭議的答案。我們需要一個初學者可以理解的標準,也許是一個檢查列表 – 有理由。
另見 Chip Bennett 在我們的元網站:Questions specifically asking for a solution “without a plugin” 的相關問題
相關:Where do I put the code snippets I found here or somewhere else on the web?
最佳解決方案
我將從這個問題開始:功能與內容的呈現,內容的生成/管理,網站的還是使用者的身份有關?
如果功能與內容的呈現不具體相關,那麼它就是在外掛領域內。這個列表很長:
- 修改核心 WP 過濾器 (
wp_head內容,如規範連結,生成器和其他 HTML 元等) - 網站圖示
- Post-content 短碼
- 釋出共享連結
- Google Analytics(分析)(和類似的) 腳註指令碼
- SEO 工具/控制元件
- 等等
如果功能與內容的呈現相關,那麼它是被包含在主題中的候選者。在這一點上,我會回到 @Raf912’s Theme-switch criterion:你會錯過功能,當你切換主題?如果該問題的答案為否,則該功能屬於主題。一些例子:
- 刪除/覆蓋 WP 核心 Gallery CSS
- 過濾帖子摘錄長度,「閱讀更多」 文字等
- 任何透過
add_theme_support()實現的 (我想這應該是明顯的) - 自定義 CSS
通常,這兩個問題將提供一個相當明確的區別; 但是,也有例外。
自定義帖子型別
例如,自定義帖子型別是內容生成和呈現的一個獨特的混合,給出了模板層次結構對於 single-post-type archive index pages 和 single post pages 的工作原理。 CPT 的 content-generation 方面通常將它們放在外掛領域中; 然而,外掛無法定義適合任何給定主題的設計/佈局/樣式的模板頁面 (特別是如果 CPT 顯示的內容不是通常的標題/內容/後設資料,或者與之相關聯的自定義分類法) 。
Long-term 是對這種差異的解決方案,IMHO 是針對給定型別內容 (房地產列表,日曆事件,e-commerce 產品,圖書/媒體庫條目等) 的 CPT 定義具有標準約定/共識。這樣,user-generated 內容將在實現給定 CPT 的標準/慣例定義的主題之間保持可移植性,而主題開發人員保留在主題模板檔案中定義該 CPT 的設計/佈局/樣式的靈活性。
社交媒體連結
同樣地,我通常會說社交媒體簡介連結,ave 在現在的主題中變得普遍存在,是外掛領域,因為它們與內容呈現無關。最好的解決方案是將這些配置檔案定義在核心的某個位置; 然而,目前沒有標準/共識的方式來定義這些連結。在 site-setting 級別是 best-defined 還是基於 per-user?如果 per-user,哪個使用者的 meta 在模板中暴露出來?等等
那麼,再次,long-term,解決這個差距是任何一個核心來定義這些連結的定義,否則主題開發者社群就會發展自己的共識。在此期間,真正沒有任何東西可以讓它們在每個主題中保持定義。
次佳解決方案
一個簡單的測試程式碼最好放在哪裡:
- 將程式碼寫入 functions.php
- 切換主題
-
你是否錯過了這個功能,部落格是不是正確的工作或舊主題的碎片 (如短碼)?
- 是的,把它放入一個外掛
- 否:將其留在 functions.php 中
示例:寫一個短碼。切換主題後,簡短的程式碼將留在您的帖子中。所以它會更好地放在外掛中。
寫一個函式列出最後的註釋。切換主題後,一切都可以,因為其他主題可能具有相同的功能。
它真的取決於程式碼和它將做什麼。一些程式碼隻影響主題的樣式或內容,還有一些程式碼將修改部落格文章。
第三種解決方案
我不認為這個問題有一個簡單的答案,但我敢打賭,我們可以製作流程圖來幫助決定。這是一個這樣一個流程圖的大綱,可以並且應該擴充套件。評論與建議!
-
-
-
具體到這個當前的設計
- 是的:functions.php
- 否:外掛
- 不 (它經常改變或者是一個奇怪的) – 外掛
-
-
-
具體到這個網站
- 具體到這個網站:functions.php
-
- 是:外掛,儲存在 mu-plugins 目錄或 network-activated
-
無關
-
- 是的:functions.php
- 否:外掛
- 不,可能是外掛
-
- 否 (由諸如 VIP 的服務託管,不允許外掛):use functions.php
-
-
- 父主題 – 有時具有共享功能,最好做一個父主題,並將功能放在父主題的 functions.php 檔案中。
- 大型多站點安裝的外掛目錄可能會很快變得不守規矩,所以有時在低百分比網站 (例如<1%) 使用的共享功能最好在 functions.php 檔案中複製。
第四種方案
將自定義程式碼新增到子主題,以便在更新父主題時,您的自定義程式碼不會丟失。
您還可以建立一個包含所有自定義程式碼的網站特定外掛。
就編寫程式碼與外掛而言,您可以使用外掛和功能,但是對於大多數您想要的,手工編碼是最好的,因為它更容易修改,除了在某些情況下,如元框,您可以考慮使用外掛,除非你 「是一個主題開發者
function modify_contact_methods($profile_fields) {
// Add new fields
$profile_fields['twitter'] = 'Twitter Username';
$profile_fields['facebook'] = 'Facebook URL';
$profile_fields['gplus'] = 'Google+ URL';
return $profile_fields;
}
add_filter('user_contactmethods', 'modify_contact_methods');
http://codex.wordpress.org/Plugin_API/Filter_Reference/user_contactmethods
- 新增新的自定義帖子型別 – Code
- 向使用者 – 上面的程式碼新增新的欄位
- 新增新的小工具 – Code
- 新增自定義永久連結 – WordPress Permalink Settings
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。