在开发主题和插件时,有时需要使用条件语句为某些挂钩添加一些功能。
示例:
function my_custom_function() {
if( is_home()) {
<---what should the function do--->
}
}
add_action( \'some_hook\', \'my_custom_function\' );
据我所知,只要存在任何其他情况(
is_home
return false),函数的内容不会执行,但是函数会执行,尽管它是“空的”。这意味着将一个空函数传递给挂钩。这是所有示例在codex中使用条件标记显示的方式。
我确实理解这样做是安全的,并且它不应该对加载时间有任何重大影响(如果对加载时间有任何影响的话)。
我一直在想,根据示例,同一段代码可以编写如下
if( is_home()) {
function my_custom_function() {
<---what the function should do--->
}
add_action( \'some_hook\', \'my_custom_funtion\' );
}
这将完全跳过所有内容,如果
is_home
返回false。
我不介意使用这两种方法中的任何一种。但我想知道的是,由于第一个示例已被广泛使用,是否有任何编码标准表明这是正确的使用方法,或者这是wordpress开发人员惯用的方法,或者只是个人喜好。
最合适的回答,由SO网友:gmazzap 整理而成
WordPress coding standards for PHP 没有对此做出任何声明,也没有其他标准,因此由开发人员选择一种或另一种方式。
我不得不说这两种方法有不同的方法;虽然第一个包含条件逻辑,但第二个是条件函数声明,这意味着如果尝试调用该函数,则会出现致命错误。
即使使用第一种方法,在函数运行的地方(对性能的影响非常小,这与应用程序加载无关且丢失),使用它也是一种更好的方法,因为在使用第二种方法时,应用程序的业务逻辑将从函数移到文件解析。
此外,您应该考虑还有第三种您没有提到的方式:
function my_custom_function() {
// what the function should do
}
if ( is_home() ) {
add_action( \'some_hook\', \'my_custom_function\' );
}
当您使用OOP编程时,这种方法的好处更加明显:在这种情况下,类条件声明没有意义(方法条件声明根本不可能),但它只在特定条件下运行任务(钩子触发)很有意义。
SO网友:fuxia
不要动态创建函数。这很难阅读和调试。使生效separation of concerns 而是将registration of callbacks 从他们的execution (业务逻辑)。现在,在回调注册之前以逻辑方式设置条件检查非常简单
Wait 对于操作template_redirect
实例化该注册处理程序,因为know 如果is_home()
可以检查。
实例
class Theme_Hooks
{
public function setup()
{
if ( ! is_404() ) {
add_action(
get_stylesheet() . \'_breadcrumb\',
[ new Breadcrumb, \'render\' ]
);
}
if ( is_home() ) {
add_action(
get_stylesheet() . \'_home_widget\',
[ new Home_Widget, \'render\' ]
);
}
}
}
add_action( \'template_redirect\', [ new Theme_Hooks, \'setup\' ] );