Виправити попередження PHP: sizeof (): Параметр повинен бути масивом або об'єктом, який реалізує підрахунку
Виправити попередження PHP: sizeof (): Параметр повинен бути масивом або об'єктом, який реалізує підрахунку
Помилка PHP, яка з’являється в багатьох WordPress Plugins які тривалий час не оновлювалися або несумісні з новими версіями PHP. Попередження PHP: sizeof(): параметр має бути масивом або об’єктом, який реалізує 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
De ce apare eroarea PHP Warning: sizeof(): Parameter must be a array or a 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.
- [Виправити PHP 7.2 / PHP 7.3] Попередження PHP: використання невизначеної константи (це викличе помилку в майбутніх версіях PHP)
- Як очистити величезні wp_options у SQL - перехідні, wpseo_sitemap _cache_validator
- Виправити wc-ajax = get_refreshed_fragments Високе використання ЦП (вимкнути фрагменти кошика AJAX)
- Як налаштувати сторінку «Немає продуктів, що відповідають вашому вибору» в WooCommerce - Оптимізація продажів в Інтернет-магазинах
- Як очистити величезні wp_options у SQL - перехідні, wpseo_sitemap _cache_validator
У випадку, якщо $crosssells Це array, використовується функція count() визначити кількість елементів в array. Якщо кількість елементів дорівнює нулю або $crosssells є порожнім рядком, повертається false.
Залишайте коментарі, якщо є якісь уточнення або доповнення до цього підручника.
Виправити попередження PHP: sizeof (): Параметр повинен бути масивом або об'єктом, який реалізує підрахунку
Що нового
Про Stealth
Пристрасний до технологій, я із задоволенням пишу на Stealthsetts.com, починаючи з 2006 року. У мене багатий досвід роботи в операційних системах: MacOS, Windows та Linux, а також у програмах програмування та платформ ведення блогів (WordPress) та для інтернет -магазинів (WooCommerce, Magento, Presashop).
Переглянути всі дописи від StealthВас також може зацікавити...