خطأ 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
عبارة عن سلسلة فارغة ، يتم إرجاع خطأ.
اترك تعليقات إذا كان هناك أي توضيحات أو إضافات لهذا البرنامج التعليمي.