Ошибка PHP, которая появляется во многих WordPress Plugins которые не были обновлены в течение длительного времени или несовместимы с новыми версиями PHP. Предупреждение PHP: sizeof (): параметр должен быть массивом или объектом, который реализует счетный.
содержание
В нашем сценарии ошибка PHP появилась в модуле Cross Sell Product Display для Woocommerce.
FastCGI sent in stderr: "PHP message: PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable in /web/path/public_html/wp-content/plugins/cross-sell-product-display-for-woocommerce/templates.php on line 18
DE CE APARE EROAREA PHP Предупреждение: sizeof (): параметр должен быть массивом или объектом, который реализует исчезновение?
Проблема, которая генерирует эту ошибку PHP, - это функция sizeof() который в версии PHP 7.2 или последующих версий может генерировать эту ошибку, если заданный параметр не является array или объект, который реализует интерфейс CountableПолем
Поэтому ошибка часто появляется после обновления версии PHP.
Как решать ошибки PHP, сгенерированные sizeof()?
Самый простой метод - заменить вызов на функцию sizeof() с вызовом функции count()Полем
В случае тех, кто использует старые версии модуля Cross Sell Product Display, решение просто. Функции из строки 18 будут заменены templates.phpПолем
function cdxfreewoocross_get_cross_sell_products($product_id=false){
if($product_id ===false ){
if(!is_product()){return false;}
$product_id = (int)get_the_ID();
if($product_id=='0'){return false;}
}
$crosssells = get_post_meta( $product_id, '_crosssell_ids',true);
if ( sizeof($crosssells ) == 0 || $crosssells =='') { return false; }
return $crosssells;
}
Приведенный выше код, в котором sizeof () будет заменен:
function cdxfreewoocross_get_cross_sell_products($product_id=false){
if($product_id ===false ){
if(!is_product()){return false;}
$product_id = (int)get_the_ID();
if($product_id=='0'){return false;}
}
$crosssells = get_post_meta( $product_id, '_crosssell_ids',true);
if ( !is_array( $crosssells ) || count( $crosssells ) == 0 || $crosssells =='') { return false; }
return $crosssells;
}
Это изменение сначала проверяет, если $crosssells Это array используя функцию is_array() и в противном случае возвращается falseПолем
Если $crosssells Это array, функция используется count() Чтобы определить количество элементов в arrayПолем Если количество элементов равно нулю или $crosssells Это вакуумная строка, она возвращает false.
Оставьте комментарии, если в этом уроке должны быть сделаны разъяснения или завершения.