Fix PHP предупреждение: sizeof (): Параметърът трябва да бъде масив или обект, който реализира преброяване
Fix 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
Предупреждение за PHP предупреждение: sizeof(): Параметърът трябва да е масив или обект, който имплементира 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
- Fix WC-AJAX = GET_REFRESHED_FRAGMENTS Високо използване на процесора (деактивиране на фрагменти на AJAX CART)
- Как да персонализирате страницата „Не са намерени продукти, отговарящи на вашия избор“ в WooCommerce - Оптимизиране на продажбите в онлайн магазините
- Как да почистите огромни wp_options в SQL – Преходни процеси, wpseo_sitemap _cache_validator
В случай че $crosssells Това е array, функцията се използва count() за определяне на броя на елементите в array. Ако броят на елементите е нула или $crosssells е празен низ, връща се false.
Оставете коментари, ако има някакви пояснения или допълнения към този урок.
Fix PHP предупреждение: sizeof (): Параметърът трябва да бъде масив или обект, който реализира преброяване
Какво ново
Около Stealth
Страстен по технологиите, с удоволствие пиша за StealthSettings.com от 2006 година. Имам богат опит със системи за операционни: macOS, Windows и Linux, както и с езици за програмиране и платформи за блогове (WordPress) и за онлайн магазини (WooCommerce, Magento, PrestaShop).
Вижте всички публикации от StealthМоже също да се интересувате от...