我的wordpress主题中有一个custom-functions.php文件, 一旦将Wordpress更新到最新版本, 似乎会引起问题。任何人都可以在此代码中看到任何错误吗?
我在日志文件中收到此错误:
` PHP Fatal error: Cannot redeclare is_iterable() (previously declared in
/home/smartservice/dev.smartservice.com/wp-includes/compat.php:536) in
/home/smartservice/dev.smartservice.com/wp-
content/themes/smartservice/custom_functions.php on line 40 `
我不熟悉Php, 但似乎已经过时了。我们在出现该错误的网站上使用PHP 7.0。
这些行的代码是custom-function.php
function is_iterable ( $var ) {
return ( is_array($var) || $var instanceof Traversable );
}
和compact.php
function is_iterable( $var ) {
return ( is_array( $var ) || $var instanceof Traversable );
}
#1
我们不能用相同的名称声明两个函数, 如果声明, 则第一个函数将求值, 第二个函数将引发错误。
最好避免使用相同的函数名
对于你的情况, 请在custom-functions.php中将is_iterator函数重命名为其他名称。
#2
PHP不允许2个函数具有相同的名称。由于一个核心WP文件定义了一个称为is_iterable()的函数, 因此你必须在custom-functions.php文件中重命名该函数。
当然, 如果你的功能与compat.php相同, 那么你可以放心地使用它, 而不是核心。
#3
尽管其他两个答案是”正确的”, 但还有更多要添加的内容, 令我惊讶的是, 没有提到!function_exists。
在PHP 7.1中, ” is_iterable”被添加为”内置”函数;因此, 你现在进行的任何修复都应适合于迁移到更高版本的PHP。
PHP文档用户注释包括一个示例, 说明你的代码在使用PHP 7.1+和同时向后兼容PHP 5.6时的外观:
因此, 你需要同时修改compact.php和custom-function.php中的代码段。
if ( !function_exists( 'is_iterable' ) ) {
function is_iterable( $var ) {
return ( is_array( $var ) || $var instanceof Traversable ); // see note below
}
}
N.B.该文档示例还包括在检查”可遍历性”之前确保var是对象
return is_array( $var ) || ( is_object( $var ) && ( $var instanceof \Traversable ) );
但我认为以前无需其他检查, 对你来说效果很好。
我不知道compact.php和custom-function.php文件是否始终都包含在所有Wordpress处理中-如果是这样, 你只需要修改compact.php并可以从custom-function.php中删除代码段即可。
评论前必须登录!
注册