我注意到许多WordPress主题的开发人员都会在functions.php中使用它。对我而言,我总是对我在functions.php中使用的每个函数都使用add_action

因此,以上内容将写为:

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_exists

if(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' ); 

    }

}


此方法在输出函数和/或标记之前检查插件是否处于活动状态,否则您可能会出现错误,例如调用未定义的函数。