问题描述
我注意到很多 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(#替换为 @) 。