問題描述
我注意到很多 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(#替換為 @) 。