Một lỗi PHP xuất hiện trong nhiều WordPress Plugins đã lâu không được cập nhật hoặc không tương thích với các phiên bản PHP mới hơn. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
Trong kịch bản của chúng tôi, lỗi PHP xảy ra trong một mô-đun Cross Sell Product Display vì 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
Nội dung
Tại sao lỗi xảy ra PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Vấn đề tạo ra lỗi PHP này là chức năng sizeof()
trong phiên bản PHP 7.2 trở lên, có thể tạo ra lỗi này, nếu tham số đã cho không phải là một array hoặc một đối tượng thực hiện giao diện Countable.
Do đó, lỗi thường xuất hiện sau khi cập nhật phiên bản PHP.
Cách giải quyết các lỗi PHP được tạo bởi sizeof()
?
Phương pháp đơn giản nhất là thay thế lời gọi hàm sizeof()
với lời gọi hàm count()
.
Trong trường hợp những người sử dụng các phiên bản cũ của mô-đun Cross Sell Product Display, giải pháp rất đơn giản. Các chức năng từ dòng 18 inch sẽ được thay thế 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;
}
Đoạn mã trên trong đó nó là sizeof() sẽ được thay thế bởi:
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;
}
Sửa đổi này đầu tiên kiểm tra nếu $crosssells
là một array sử dụng chức năng is_array()
và, nếu không, trả về false.
Trong trường hợp $crosssells
là một array, chức năng được sử dụng count()
xác định số phần tử trong array. Nếu số phần tử bằng XNUMX hoặc $crosssells
là một chuỗi rỗng, false được trả về.
Để lại nhận xét nếu có bất kỳ sự làm rõ hoặc bổ sung nào cho hướng dẫn này.