插件模板中出现意外的T_Function

时间:2014-12-10 作者:Gareth Gillman

我有一个为客户端开发的插件,它在我的服务器上运行很有趣,但在他们的服务器上不起作用,他们在godaddy上,所以我猜这是他们的PHP版本的问题?

add_filter(\'template_include\', function ( $template ) {
 if(is_tax(\'hha_cats\')){
  $template = dirname( __FILE__ ) . \'/templates/category-hhavideo.php\';
 }
 if( is_post_type_archive( \'hhavideo\' ) ){
  $template = dirname( __FILE__ ) . \'/templates/archive-hhavideo.php\';
 }
 return $template;
 }, PHP_INT_MAX, 2 );
这段代码是在我遇到另一个问题后由另一个SE用户编写的(here), 有没有一种方法可以在旧版本的PHP上实现这一点?(没有检查,我相信她的服务器是5.2,我的是5.3)。

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

EDIT

取消删除我的答案,因为代码似乎对OP有所帮助。最初被@TomJNowell击败,所以某些内容可能是相同的

ORIGINAL ANSWER

这比Wordpress更与PHP相关。Anonymous functions, 所给代码中使用的语法仅在PHP 5.3中引入,在旧版本中不起作用。如果您确信您的客户机使用的是PHP 5.2,那么这很可能就是错误的原因。

您只需对代码稍作修改即可使其在旧版本上运行

add_filter(\'template_include\', \'my_function_name\', PHP_INT_MAX, 2 );
function my_function_name( $template ) {
 if(is_tax(\'hha_cats\')){
  $template = dirname( __FILE__ ) . \'/templates/category-hhavideo.php\';
 }
 if( is_post_type_archive( \'hhavideo\' ) ){
  $template = dirname( __FILE__ ) . \'/templates/archive-hhavideo.php\';
 }
 return $template;
 } 

SO网友:Tom J Nowell

PHP 5.2和5.3都很旧,都应该升级。尤其是你的客户在5.2上。除了主要的安全修复和巨大的性能提升,PHP 5.3 introduced closures and anonymous functions, e、 g.:

add_action( \'init\', function () {
    echo \'hello\';
} );
上述代码在PHP 5.3中有效,并将在5.2中生成语法错误,这就是为什么使用匿名函数的代码在客户端服务器上失败的原因。

要使代码与5.2兼容,需要单独定义函数并传入其名称,而不是就地定义。

function myfunction() {
    echo \'hello\';
}
add_action( \'init\', \'myfunction\' );
然而,相反,我strongly 出于安全原因,建议您都更新到PHP 5.5,或者找一个至少使用PHP 5.4的主机。在撰写本文时,PHP 5.6是最新版本,PHP 5.2和5.3不再受支持或维护。

Sidenote: 您的代码使用anonymous function 在过滤器中,调试和删除可能会很麻烦。e、 g.你传递给什么remove_action 如果函数没有名称?

结束

相关推荐