Поправити PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 

ПХП грешка која се појављује у многим WordPress Plugins које дуго нису ажуриране или су некомпатибилне са новијим верзијама ПХП-а. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

У нашем сценарију, ПХП грешка се појавила у модулу Cross Sell Product Display за 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

Зашто долази до грешке PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Проблем који генерише ову ПХП грешку је функција sizeof() који у верзији ПХП 7.2 или новијим верзијама, може да генерише ову грешку, ако дати параметар није један array или објекат који имплементира интерфејс Countable.

Због тога се грешка често појављује након ажурирања ПХП верзије.

Како решити ПХП грешке које генерише sizeof()?

Најједноставнији метод је замена позива функције sizeof() са позивом функције count().

У случају оних који користе старе верзије модула Cross Sell Product Display, решење је једноставно. Функције из реда од 18 инча ће бити замењене 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;
	
}

Горњи код у коме је sizeof() биће замењен са:

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

Ова модификација прво проверава да ли $crosssells је array користећи функцију is_array() а у супротном се враћа false.

У случају $crosssells је array, функција се користи count() да одреди број елемената у array. Ако је број елемената нула или $crosssells је празан стринг, враћа се фалсе.

Оставите коментаре ако постоје појашњења или додаци овом водичу.

Страствен за технологију, пишем са задовољством StealthSettings.цом од 2006. Имам велико искуство у оперативним системима: macOS, Windows си Linux, али и на програмским језицима и блогерским платформама (WordPress) и за онлајн продавнице (WooCommerce, Магенто, ПрестаСхоп).

како » WordPress » Поправити PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Оставите коментар