Une erreur PHP qui apparaît dans de nombreux WordPress Plugins qui n'ont pas été mis à jour depuis longtemps ou qui sont incompatibles avec les nouvelles versions de PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
Dans notre scénario, l'erreur PHP s'est produite dans un module Cross Sell Product Display pour 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
Sommaire
Pourquoi l'erreur se produit PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Le problème qui génère cette erreur PHP est la fonction sizeof()
qui dans la version de PHP 7.2 ou versions ultérieures, peut générer cette erreur, si le paramètre donné n'en est pas un array ou un objet qui implémente l'interface Countable.
Par conséquent, l'erreur apparaît souvent après une mise à jour de la version PHP.
Comment résoudre les erreurs PHP générées par sizeof()
?
La méthode la plus simple consiste à remplacer l'appel de fonction sizeof()
avec un appel de fonction count()
.
Dans le cas de ceux qui utilisent les anciennes versions du module Cross Sell Product Display, la solution est simple. Les fonctions de la gamme 18 pouces seront remplacées 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;
}
Le code ci-dessus dans lequel il est sizeof() sera remplacé par :
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;
}
Cette modification vérifie d'abord si $crosssells
est un array en utilisant la fonction is_array()
et, sinon, renvoie false.
En cas de $crosssells
est un array, la fonction est utilisée count()
pour déterminer le nombre d'éléments dans array. Si le nombre d'éléments est nul ou $crosssells
est une chaîne vide, false est renvoyé.
Laissez des commentaires s'il y a des clarifications ou des ajouts à ce tutoriel.