PHP pogreška koja se pojavljuje u mnogim WordPress Plugins koji dugo nisu ažurirani ili su nekompatibilni s novijim verzijama PHP-a. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
U našem scenariju, PHP pogreška se dogodila u modulu Cross Sell Product Display za 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
Kuprini
Zašto dolazi do greške PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Problem koji generira ovu PHP pogrešku je funkcija sizeof()
koji u verziji PHP 7.2 ili novijim verzijama može generirati ovu pogrešku, ako navedeni parametar nije jedan array ili objekt koji implementira sučelje Countable.
Stoga se pogreška često pojavljuje nakon ažuriranja PHP verzije.
Kako riješiti PHP pogreške koje generira sizeof()
?
Najjednostavnija metoda je zamijeniti poziv funkcije sizeof()
s pozivom funkcije count()
.
U slučaju onih koji koriste stare verzije modula Cross Sell Product Display, rješenje je jednostavno. Funkcije iz linije od 18 inča bit će zamijenjene 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;
}
Gornji kod u kojem je sizeof() bit će zamijenjen sa:
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;
}
Ova izmjena najprije provjerava je li $crosssells
je array koristeći funkciju is_array()
a, inače, vraća se false.
U slučaju $crosssells
je array, koristi se funkcija count()
odrediti broj elemenata u array. Ako je broj elemenata nula ili $crosssells
je prazan niz, vraća se false.
Ostavite komentare ako postoje pojašnjenja ili dodaci ovom vodiču.