Kesalahan PHP yang muncul di banyak WordPress Plugins yang sudah lama tidak diperbarui atau tidak kompatibel dengan versi PHP yang lebih baru. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
Dalam skenario kami, kesalahan PHP terjadi di modul Cross Sell Product Display untuk 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
Cuprin
Mengapa kesalahan terjadi? PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Masalah yang menghasilkan kesalahan PHP ini adalah fungsinya sizeof()
yang dalam versi PHP 7.2 atau versi yang lebih baru, dapat menghasilkan kesalahan ini, jika parameter yang diberikan bukan satu array atau objek yang mengimplementasikan antarmuka Countable.
Oleh karena itu, error sering muncul setelah update versi PHP.
Bagaimana mengatasi kesalahan PHP yang dihasilkan oleh sizeof()
?
Metode paling sederhana adalah mengganti pemanggilan fungsi sizeof()
dengan pemanggilan fungsi count()
.
Dalam kasus mereka yang menggunakan modul versi lama Cross Sell Product Display, solusinya sederhana. Fungsi dari baris 18 in. akan diganti 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;
}
Kode di atas di mana itu sizeof() akan digantikan oleh:
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;
}
Modifikasi ini pertama kali memeriksa apakah $crosssells
adalah array menggunakan fungsi is_array()
dan, jika tidak, kembali false.
Dalam kasus $crosssells
adalah array, fungsi digunakan count()
untuk menentukan jumlah elemen array. Jika jumlah elemen adalah nol atau $crosssells
adalah string kosong, false dikembalikan.
Tinggalkan komentar jika ada klarifikasi atau tambahan pada tutorial ini.