Opravte varování PHP: sizeof (): Parametr musí být pole nebo objekt, který implementuje počítání
Opravte varování PHP: sizeof (): Parametr musí být pole nebo objekt, který implementuje počítání
Chyba PHP, která se objevuje v mnoha WordPress Plugins které nebyly dlouho aktualizovány nebo jsou nekompatibilní s novějšími verzemi PHP. Upozornění PHP: sizeof(): Parametr musí být pole nebo objekt, který implementuje Countable.
obsah
V našem scénáři došlo k chybě PHP v modulu Cross Sell Product Display pro 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(): Parametr musí být pole nebo objekt, který implementuje Countable ?
Problém, který generuje tuto chybu PHP, je funkce sizeof() který ve verzi PHP 7.2 nebo novějších může tuto chybu generovat, pokud zadaný parametr není jedna array nebo objekt, který implementuje rozhraní Countable.
Chyba se proto často objevuje po aktualizaci verze PHP.
Jak vyřešit chyby PHP generované sizeof()?
Nejjednodušší metodou je nahrazení volání funkce sizeof() s voláním funkce count().
V případě těch, kteří používají staré verze modulu Cross Sell Product Display, řešení je jednoduché. Budou nahrazeny funkce z řady 18 palců 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;
}
Výše uvedený kód, kde je sizeof() bude nahrazen:
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;
}
Tato úprava nejprve zkontroluje, zda $crosssells Je to array pomocí funkce is_array() a jinak se vrátí false.
- [Opravit PHP 7.2 / PHP 7.3] Varování PHP: Použití nedefinované konstanty (to vyvolá chybu v budoucí verzi PHP)
- Jak vyčistit obrovské wp_options in SQL - přechodné, wpseo_sitemap _cache_validator
- Oprava wc-ajax = get_refreshed_fragments Vysoké využití CPU (Zakázat fragmenty košíku AJAX)
- Jak přizpůsobit stránku „Žádné produkty nebyly nalezeny odpovídající vašemu výběru“ ve WooCommerce - optimalizace prodeje v online obchodech
- Jak vyčistit obrovské wp_options in SQL - přechodné, wpseo_sitemap _cache_validator
V případě, že $crosssells Je to array, funkce se používá count() určit počet prvků v array. Pokud je počet prvků nula resp $crosssells je prázdný řetězec, vrátí se false.
Zanechte komentáře, pokud existují nějaká vysvětlení nebo dodatky k tomuto tutoriálu.
Opravte varování PHP: sizeof (): Parametr musí být pole nebo objekt, který implementuje počítání
Co je nového
O Stealth
Nadšenec do technologií, s radostí píšu na StealthSettings.com od roku 2006. Mám bohaté zkušenosti s operačními systémy: macOS, Windows a Linux, ale také s programovacími jazyky a bloggingovými platformami (WordPress) a pro online obchody (WooCommerce, Magento, PrestaShop).
Zobrazit všechny příspěvky od StealthMohlo by vás také zajímat...