問題描述
我收到了一個問題,我必須載入我的父主題的 functions.php 檔案載入我的孩子主題的 functions.php 檔案。這對於設定& init 程式。我看著/wp_core_root/wp-settings.php(命名為 do_action('setup_theme');) 中的鉤子。
問題是,我不知道如何掛在那裡,因為我得到的第一個檔案是孩子主題的 functions.php,所以沒有 add_action( 'setup_theme', 'my_init_function' ); 將工作。
編輯:a) 我知道外掛早於主題載入,因此即使是初始查詢也可以訪問,但我不想依賴外掛。 b) 這是 wp-settings.php 檔案中的程式碼 (縮寫)
// happens a lot earlier:
do_action( 'plugins_loaded' );
// localize stuff happening here
do_action( 'setup_theme' );
// Load the functions for the active theme, for both parent and child theme if applicable.
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
include( STYLESHEETPATH . '/functions.php' );
if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
include( TEMPLATEPATH . '/functions.php' );
// first available hook, *after* functions.php was loaded
do_action( 'after_setup_theme' );
我想避免兩件事情:首先很多的說明給使用者。第二,如果切斷繩子意外刪除父母的初始化程式,有人會打破任何事情的機會。人們只要在 functions.php 裡面玩,而不用弄清楚什麼就不用了。
換句話說:我如何保持我的小孩主題的 functions.php 檔案乾淨,但父主題引導完成?
有任何想法嗎?非常感謝!
最佳解決方案
Justin Tadlock 最近寫了一篇關於製作一個更好的 functions.php 檔案的偉大文章,其中 (如果我記得正確的話) 他處理這個確切的問題。
不幸的是,他的網站目前正在下降,所以現在我不得不依靠我的 memory 。
您正在 after_setup_theme 掛鉤的正確軌道上。
-
據我所知,訣竅是將過濾器和操作包裝到其功能中。參見下面的例子。
-
您可以在父和子
functions.php檔案中執行此操作。 -
然後你可以玩這兩個鉤子的優先順序。
程式碼值一千位的小字 – 您的父主題 function.php 應該如下所示:
add_action( 'after_setup_theme', 'your_parent_theme_setup', 9 );
function your_parent_theme_setup() {
add_action(admin_init, your_admin_init);
add_filter(the_content, your_content_filter);
}
function your_admin_init () {
...
}
function your_content_filter() {
...
}
次佳解決方案
首先,你不能。孩子主題的 functions.php 總是先載入,期間。
二,主題不能掛鉤到 setup_theme 。外掛可以,但主題可以掛鉤的第一件事是 after_setup_theme 。
如果您的父母設計正確,那麼該子項能夠覆蓋父項中的功能和內容,但只有在首次載入時才可以。
一般來說,如果您認為您需要首先載入父級的函式檔案,那麼您可能會做錯,不知何故。你需要解釋更大的問題。
第三種解決方案
所以你試圖從孩子的 functions.php 執行程式碼,但在父主題載入完畢之後。簡單,只需使用自定義操作:
在 parent/functions.php 結束時:
do_action('parent_loaded');
在 child/functions.php:
function parent_loaded() {
// do init stuff
}
add_action('parent_loaded', 'parent_loaded');
所有值得他們的鹽的父母主題都是這樣做的。此外,他們還有幾個其他的操作和過濾器,以供兒童主題使用。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。