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.
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.