因此,以上内容将写为:
if (function_exists('register_nav_menus')) {
register_nav_menus (array('primary' => 'Header Navigation'));
}
我有两个问题:
为什么在第一种方法中使用if语句?
哪个是正确的方法?
#1 楼
因此,如果看到
if ( function_exists( 'register_nav_menus' ) )
,主题作者支持的版本早于3.0。您有时还是会看到
if ( function_exists( 'dynamic_sidebar' ) )
为什么?我不能告诉你,因为dynamic_sidebar是在2.2中引入的。使用它的另一个原因是使主题或插件可插入。可插拔功能是可以在子主题或其他插件中覆盖的功能。
这是在定义而不是调用上完成的,您可以使用!
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();
}
}
完成此操作后,子主题或其他插件可以自己覆盖该功能。
#2 楼
function_exists
函数不是加载add_action
之类的函数的另一种方法,它可以检查您的代码以查看是否没有其他同名函数,因此不会破坏您的代码。从php.net:检查定义的函数列表,包括内置(内部)函数和用户定义的
函数名称。
如果两次在代码中使用相同的函数,则会中断,这就是为什么在函数前加上wp_以外的前缀。
阅读更多内容:http://php.net/手册/zh/function.function-exists.php
#3 楼
如果要查看所有可用功能,则可以使用http://php.net/function_existsif(function_exists('my_function')){
// my_function is defined
}
或,如果您想查看所有可用功能,则也可以打印所有内容,
echo "<pre>"; print_r(get_defined_functions());
打印在页面上,如果在列表中找不到该功能,则表示该功能不可用,您可以搜索该功能。
您可能需要激活特定库的扩展。
#4 楼
php.net将此定义为(PHP 4,PHP 5,PHP 7)function_exists —如果已定义给定函数,则返回TRUE
我必须同意米歇尔在用法上的看法,因为您只能将检查用于类似于类型转换检查的检查;因此,您将寻找某个功能是否存在(在该页面上或在该页面/文件引用中所调用的任何内容),以便您可以安全地运行另一个功能或解析某些模板HTML。
正如有人提到的那样,它通常用于检查您的文件/主题(使用WordPress)是否能够运行您所需的请求。我已使用它来检查主题是否具有特定的模板部分。
if ( function_exists( 'register_sidebar' ) ) {
get_sidebar();
}
#5 楼
function_exists
应该在主题中的函数名称之后使用。add_action( 'loop_start', 'add_slider' );
function add_slider() {
if ( function_exists( 'soliloquy' ) ) {
soliloquy( 'slider', 'slug' );
}
}
此方法在输出函数和/或标记之前检查插件是否处于活动状态,否则您可能会出现错误,例如调用未定义的函数。