Ошибка PHP, которая появляется во многих WordPress Plugins которые давно не обновлялись или несовместимы с более новыми версиями PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
В нашем сценарии ошибка 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
Cодержание
Почему возникает ошибка PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Проблема, которая генерирует эту ошибку 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.
Оставляйте комментарии, если есть какие-то уточнения или дополнения к этому туториалу.