問題描述
我注意到很多 WordPress 主題的開發人員將在 functions.php 中使用它
if (function_exists('register_nav_menus')) {
register_nav_menus (array('primary' => 'Header Navigation'));
}
對於我來説,我還是使用 add_action 來處理我在 functions.php 中使用的每個功能
所以上面寫的是:
add_action('init', 'my_register_nav_menus');
function my_register_nav_menus() {
register_nav_menus (array('primary' => 'Header Navigation'));
}
我有兩個問題:
-
為什麼在第一種方法中使用 if 語句?
-
哪一種是正確的方法?
最佳解決方案
在調用它們之前檢查是否存在內置的 WordPress 函數是為了向後兼容,不需要 IMHO 。
所以如果你看到 if ( function_exists( 'register_nav_menus' ) ),主題作者支持 3.0 之前的版本。
你還有時候看到 if ( function_exists( 'dynamic_sidebar' ) )為什麼?我不能告訴你,因為在 2.2 中引入了 dynamic_sidebar 。
使用它的另一個原因是使您的主題或插件可插拔。可插拔功能是可以在子主題或其他插件中覆蓋的功能。
這個定義不是調用,而是你使用!操作員確定它在您定義之前不存在。
if ( ! function_exists( 'my_awesome_function' ) ) {
/**
* My Awesome function is awesome
*
* @param array $args
* @return array
*/
function my_awesome_function( $args ) {
//function stuff
return array();
}
}
當這樣做完成時,兒童主題或其他插件可以用自己的方式覆蓋該功能。
次佳解決方案
function_exists 函數不是另一種方式來加載 add_action 這樣的函數來檢查你的代碼,看看沒有其他同名的函數,所以它不會破壞你的代碼。從 php.net:
Checks the list of defined functions, both built-in (internal) and user-defined, for function_name.
如果你的代碼中有兩個相同的功能,那麼它將會破壞,那就是為什麼你的函數前綴不是 wp_。
閲讀更多:http://php.net/manual/en/function.function-exists.php
參考文獻
注:本文內容整合自 google/baidu/bing 翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:gxnotes#qq.com(#替換為 @) 。