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

Un error de PHP que aparece en muchos WordPress Plugins que no se han actualizado durante mucho tiempo o son incompatibles con las versiones más nuevas de PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

En nuestro escenario, el error de PHP ocurrió en un 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 qué ocurre el error PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

El problema que genera este error de PHP es la función sizeof() que en la versión de PHP 7.2 o versiones posteriores, puede generar este error, si el parámetro dado no es uno array o un objeto que implementa la interfaz Countable.

Por lo tanto, el error suele aparecer después de una actualización de la versión de PHP.

Cómo solucionar errores de PHP generados por sizeof()?

El método más simple es reemplazar la llamada a la función sizeof() con una llamada de función count().

En el caso de quienes usan versiones antiguas del módulo Cross Sell Product Display, la solución es sencilla. Las funciones de la línea de 18 pulgadas serán reemplazadas 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;
	
}

El código anterior en el que se encuentra sizeof() será reemplazado 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 modificación comprueba primero si $crosssells es una array usando la función is_array() y, en caso contrario, devuelve false.

En caso de $crosssells es una array, se utiliza la función count() determinar el número de elementos en array. Si el número de elementos es cero o $crosssells es una cadena vacía, se devuelve falso.

Deje comentarios si hay aclaraciones o adiciones a este tutorial.

Apasionado por la tecnología, escribo con gusto en StealthSettings.com desde el año 2006. Tengo una amplia experiencia en sistemas operativos: macOS, Windows y Linux, así como en lenguajes de programación y plataformas de blogs (WordPress) y para tiendas en línea (WooCommerce, Magento, PrestaShop).

Cómo » WordPress » Fijar PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Deja un comentario