Napaka PHP, ki se pojavlja v mnogih WordPress Plugins ki že dolgo niso bili posodobljeni ali niso združljivi z novejšimi različicami PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
V našem scenariju je do napake PHP prišlo v 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
Zakaj pride do napake PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Težava, ki povzroči to napako PHP, je funkcija sizeof()
ki v različici PHP 7.2 ali novejših različicah lahko ustvari to napako, če podani parameter ni en array ali objekt, ki implementira vmesnik Countable.
Zato se napaka pogosto pojavi po posodobitvi različice PHP.
Kako odpraviti napake PHP, ki jih ustvari sizeof()
?
Najenostavnejša metoda je zamenjava funkcijskega klica sizeof()
s klicem funkcije count()
.
V primeru tistih, ki uporabljajo stare verzije modula Cross Sell Product Display, rešitev je preprosta. Zamenjane bodo funkcije iz linije 18 in 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;
}
Zgornja koda, v kateri je sizeof() bo nadomeščen z:
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;
}
Ta sprememba najprej preveri, ali $crosssells
je array uporabo funkcije is_array()
in sicer se vrne false.
V primeru $crosssells
je array, se uporablja funkcija count()
za določitev števila elementov v array. Če je število elementov nič oz $crosssells
je prazen niz, vrne se false.
Pustite komentarje, če obstajajo kakršna koli pojasnila ali dodatki k tej vadnici.