PHP kļūda, kas parādās daudzos WordPress Plugins kas nav tikuši atjaunināti ilgu laiku vai nav saderīgi ar jaunākām PHP versijām. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
Mūsu scenārijā PHP kļūda radās modulī Cross Sell Product Display par 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
Saturu
Kāpēc rodas kļūda PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Problēma, kas rada šo PHP kļūdu, ir funkcija sizeof()
kas PHP 7.2 vai jaunākās versijās var ģenerēt šo kļūdu, ja norādītais parametrs nav viens array vai objekts, kas ievieš saskarni Countable.
Tāpēc kļūda bieži parādās pēc PHP versijas atjaunināšanas.
Kā atrisināt PHP kļūdas, ko rada sizeof()
?
Vienkāršākā metode ir aizstāt funkcijas izsaukumu sizeof()
ar funkciju izsaukumu count()
.
Tiem, kas izmanto vecās moduļa versijas Cross Sell Product Display, risinājums ir vienkāršs. Funkcijas no 18 collu līnijas tiks aizstātas 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;
}
Iepriekš minētais kods, kurā tas atrodas sizeof() tiks aizstāts ar:
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;
}
Šī modifikācija vispirms pārbauda, vai $crosssells
ir array izmantojot funkciju is_array()
un pretējā gadījumā atgriežas false.
Gadījumā, ja $crosssells
ir array, funkcija tiek izmantota count()
lai noteiktu elementu skaitu array. Ja elementu skaits ir nulle vai $crosssells
ir tukša virkne, tiek atgriezta false.
Atstājiet komentārus, ja šajā apmācībā ir kādi precizējumi vai papildinājumi.