自定义功能文件问题

时间:2018-07-02 13:19:56

标签: php wordpress wordpress-theming

我的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 );
}

3 个答案:

答案 0 :(得分:1)

我们不能用相同的名称声明两个函数,如果声明,则第一个函数将求值,第二个函数将引发错误。

避免使用相同的函数名称

对于您而言,请在custom-functions.php中将is_iterator函数重命名为其他名称。

答案 1 :(得分:0)

PHP不允许2个函数具有相同的名称。由于一个核心WP文件定义了一个名为is_iterable()的函数,因此您必须在custom-functions.php文件中重命名该函数。

当然,如果您的功能与compat.php的功能相同,那么您可以放心地使用核心的功能。

答案 2 :(得分:0)

尽管其他2个答案都是“正确的”,但仍有更多要添加的内容,我很惊讶没有提到!function_exists

is_iterable”被添加为PHP 7.1中的“内置”函数;因此,您现在进行的任何修复都应适合于迁移到更高版本的PHP。

PHP documentation user notes包含一个示例,说明您的代码应为同时使用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
  }
}

该文档示例还包括在检查“可遍历性”之前确保var是一个对象

return is_array( $var ) || ( is_object( $var ) && ( $var instanceof \Traversable ) );

但我认为以前无需其他检查即可对您有效。

我不知道compact.php和custom-function.php文件是否总是同时包含在所有Wordpress处理中-如果这样,您只需要修改compact.php并可以从custom中删除代码段-function.php