Выпуск файла пользовательских функций - PullRequest
0 голосов
/ 02 июля 2018

У меня есть файл custom-functions.php в моей теме WordPress, который, кажется, вызывает проблему, как только я обновляю 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 голосов
/ 02 июля 2018

Мы не можем объявить две функции с одинаковыми именами, если вы объявите, то первая функция будет вычислена, а вторая вызовет ошибку.

Лучше избегать одинаковых имен функций

В вашем случае, пожалуйста, переименуйте вашу функцию is_iterator в custom-functions.php на другое имя.

0 голосов
/ 02 июля 2018

Хотя остальные 2 ответа являются «правильными», есть еще что добавить, и я удивлен, что ничего не было упомянуто о !function_exists.

" is_iterable " добавлено как встроенная функция в PHP 7.1; поэтому любое исправление, которое вы делаете сейчас, должно способствовать переходу на более позднюю версию 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. Пример документации дополнительно включает проверку наличия объекта перед проверкой «проходимости»

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

но я предполагаю, что ранее это работало нормально для вас без дополнительной проверки.

Я не знаю, всегда ли файлы compact.php и custom-function.php всегда включены вместе во всю обработку Wordpress - , если это так, вам нужно всего лишь изменить compact.php и удалить фрагмент из пользовательского -function.php .

0 голосов
/ 02 июля 2018

PHP не позволяет двум функциям иметь одинаковые имена. Поскольку основной WP-файл определяет функцию is_iterable (), вам придется переименовать ее в файле custom-functions.php.

Конечно, если ваша функция идентична функции compat.php, вы можете смело избавиться от своей в пользу основной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...