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

خطأ PHP يظهر في العديد من ملفات WordPress Plugins التي لم يتم تحديثها لفترة طويلة أو غير متوافقة مع الإصدارات الأحدث من PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

في السيناريو الخاص بنا ، حدث خطأ PHP في وحدة نمطية 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 ?

المشكلة التي تولد خطأ PHP هذا هي الوظيفة sizeof() والتي في إصدار PHP 7.2 أو الإصدارات الأحدث ، يمكن أن تولد هذا الخطأ ، إذا لم تكن المعلمة المعينة واحدة array أو كائن يقوم بتنفيذ الواجهة Countable.

لذلك ، غالبًا ما يظهر الخطأ بعد تحديث إصدار PHP.

كيفية حل أخطاء PHP الناتجة عن 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.com منذ عام 2006. لدي خبرة واسعة في أنظمة التشغيل: macOS, Windows سي Linuxبل أيضًا في لغات البرمجة ومنصات التدوين (WordPress) وللمتاجر عبر الإنترنت (WooCommerce، ماجنتو، بريستاشوب).

كيف » WordPress » حل PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
اترك تعليق