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

Um erro de PHP que aparece em muitos WordPress Plugins que não são atualizados há muito tempo ou são incompatíveis com as versões mais recentes do PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Em nosso cenário, o erro de PHP ocorreu em um módulo Cross Sell Product Display para 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

Por que o erro ocorre PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

O problema que gera esse erro do PHP é a função sizeof() que na versão do PHP 7.2 ou versões posteriores, pode gerar esse erro, caso o parâmetro informado não seja um array ou um objeto que implementa a interface Countable.

Portanto, o erro geralmente aparece após uma atualização da versão do PHP.

Como resolver erros de PHP gerados por sizeof()?

O método mais simples é substituir a chamada de função sizeof() com uma chamada de função count().

No caso de quem usa versões antigas do módulo Cross Sell Product Display, a solução é simples. As funções da linha de 18 polegadas serão substituídas 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;
	
}

O código acima em que é sizeof() será substituído por:

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;
	
}

Esta modificação primeiro verifica se $crosssells é um array usando a função is_array() e, caso contrário, retorna false.

No caso de $crosssells é um array, a função é usada count() para determinar o número de elementos em array. Se o número de elementos for zero ou $crosssells é uma string vazia, false é retornado.

Deixe comentários se houver algum esclarecimento ou acréscimo a este tutorial.

Apaixonado por tecnologia, escrevo com prazer no StealthSettings.com desde 2006. Tenho uma ampla experiência em sistemas operacionais: macOS, Windows e Linux, assim como em linguagens de programação e plataformas de blogs (WordPress) e para lojas online (WooCommerce, Magento, PrestaShop).

Como » WordPress » Fixar PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Deixe um comentário