ПХП грешка која се појављује у многим WordPress Plugins које дуго нису ажуриране или су некомпатибилне са новијим верзијама ПХП-а. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
У нашем сценарију, ПХП грешка се појавила у модулу 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 ?
Проблем који генерише ову ПХП грешку је функција sizeof()
који у верзији ПХП 7.2 или новијим верзијама, може да генерише ову грешку, ако дати параметар није један array или објекат који имплементира интерфејс Countable.
Због тога се грешка често појављује након ажурирања ПХП верзије.
Како решити ПХП грешке које генерише 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
је празан стринг, враћа се фалсе.
Оставите коментаре ако постоје појашњења или додаци овом водичу.