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. Cảnh báo PHP: sizeof(): Tham số phải là một mảng hoặc một đối tượng triển khai Có thể đếm được.
nội dung
Trong trường hợp của chúng tôi, đã xảy ra lỗi PHP trong một mô-đun Cross Sell Product Display cho WooC Commerce.
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
De ce apare eroarea PHP Cảnh báo: sizeof(): Tham số phải là một mảng hoặc một đối tượng thực hiện Countable ?
Vấn đề tạo ra lỗi PHP này là ở hàm 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.
Vì vậy, 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ệnh gọi hàm sizeof() với một cuộc gọi chức năng count().
Đối với những người sử dụng 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 nơi sizeof() sẽ được thay thế bằng:
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 trước tiên sẽ kiểm tra xem $crosssells Đó là a 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à a array, hàm được sử dụng count() để xác định số phần tử trong array. Nếu số phần tử bằng 0 hoặc $crosssells là một chuỗi rỗng, trả về sai.
Để lại nhận xét nếu có bất kỳ giải thích hoặc bổ sung nào cho hướng dẫn này.