Un errore PHP che appare in molti WordPress Plugins che non sono stati aggiornati da molto tempo o sono incompatibili con le versioni più recenti di PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
Nel nostro scenario, l'errore PHP si è verificato in un modulo Cross Sell Product Display per 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
Soddisfare
Perché si verifica l'errore PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Il problema che genera questo errore PHP è la funzione sizeof()
che nella versione di PHP 7.2 o successive, può generare questo errore, se il parametro dato non è uno array o un oggetto che implementa l'interfaccia Countable.
Pertanto, l'errore appare spesso dopo un aggiornamento della versione PHP.
Come risolvere gli errori PHP generati da sizeof()
?
Il metodo più semplice consiste nel sostituire la chiamata di funzione sizeof()
con una chiamata di funzione count()
.
Nel caso di coloro che utilizzano vecchie versioni del modulo Cross Sell Product Display, la soluzione è semplice. Le funzioni della linea 18 pollici verranno sostituite 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;
}
Il codice sopra in cui si trova sizeof() sarà sostituito da:
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;
}
Questa modifica controlla prima se $crosssells
è un array utilizzando la funzione is_array()
e, in caso contrario, ritorna false.
In caso di $crosssells
è un array, la funzione viene utilizzata count()
per determinare il numero di elementi in array. Se il numero di elementi è zero o $crosssells
è una stringa vuota, viene restituito false.
Lascia commenti se ci sono chiarimenti o aggiunte a questo tutorial.