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.

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

Apasionado de la tecnología, me gusta probar y escribir tutoriales sobre sistemas operativos. macOS, Linux, Windowsacerca de WordPress, WooCommerce y configurar servidores web LEMP (Linux, NGINX, MySQL y PHP). escribo en StealthSettings.com desde 2006, y unos años más tarde comencé a escribir en iHowTo.Tips tutoriales y noticias sobre dispositivos en el ecosistema Apple: iPhone, iPad, Apple Reloj, HomePod, iMac, MacBook, AirPods y accesorios.

Deja un comentario