Fissare PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 

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

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.

Appassionato di tecnologia, scrivo con piacere su StealthSettings.com dal 2006. Ho un'ampia esperienza nei sistemi operativi: macOS, Windows e Linux, nonché nei linguaggi di programmazione e nelle piattaforme di blogging (WordPress) e per i negozi online (WooCommerce, Magento, PrestaShop).

Come » WordPress » Fissare PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Lascia un tuo commento