Fix PHP -advarsel: størrelse av (): Parameter må være en matrise eller et objekt som implementerer tellbar
Fix PHP -advarsel: størrelse av (): Parameter må være en matrise eller et objekt som implementerer tellbar
En PHP-feil som dukker opp i mange WordPress Plugins som ikke har blitt oppdatert på lenge eller er inkompatible med nyere versjoner av PHP. PHP Advarsel: sizeof(): Parameteren må være en matrise eller et objekt som implementerer Countable.
Innhold
I vårt scenario oppsto PHP-feilen i en modul Cross Sell Product Display for 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
De ce apare eroarea PHP Advarsel: sizeof(): Parameteren må være en matrise eller et objekt som implementerer Countable ?
Problemet som genererer denne PHP-feilen er funksjonen sizeof() som i versjonen av PHP 7.2 eller nyere versjoner, kan generere denne feilen, hvis den gitte parameteren ikke er én array eller et objekt som implementerer grensesnittet Countable.
Derfor dukker feilen ofte opp etter en oppdatering av PHP-versjonen.
Hvordan løse PHP-feil generert av sizeof()?
Den enkleste metoden er å erstatte funksjonskallet sizeof() med et funksjonskall count().
Når det gjelder de som bruker gamle versjoner av modulen Cross Sell Product Display, løsningen er enkel. Funksjonene fra 18 tommers linjen vil bli erstattet 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;
}
Koden ovenfor der sizeof() er vil bli erstattet med:
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;
}
Denne modifikasjonen sjekker først om $crosssells Det er en array ved å bruke funksjonen is_array() og ellers returnerer false.
- [Fiks PHP 7.2 / PHP 7.3] PHP Advarsel: Bruk av udefinert konstant (dette vil gi en feil i en fremtidig versjon av PHP)
- Hvordan rense enorme wp_options i SQL – Transients, wpseo_sitemap _cache_validator
- Fix wc-ajax = get_refreshed_fragments Høy CPU-bruk (deaktiver AJAX Cart Fragments)
- Hvordan tilpasse siden "Ingen produkter ble funnet som samsvarer med valget ditt" i WooCommerce - Optimalisering av salg på nettbutikker
- Hvordan rense enorme wp_options i SQL – Transients, wpseo_sitemap _cache_validator
I tilfelle det $crosssells Det er en array, brukes funksjonen count() for å bestemme antall elementer i array. Hvis antall elementer er null eller $crosssells er en tom streng, returneres false.
Legg igjen kommentarer hvis det er noen avklaringer eller tillegg til denne opplæringen.
Fix PHP -advarsel: størrelse av (): Parameter må være en matrise eller et objekt som implementerer tellbar
Hva er nytt
Om Stealth
Lidenskapelig opptatt av teknologi, skriver jeg med glede på StealthSettings.com siden 2006. Jeg har rik erfaring innen operativsystemer: macOS, Windows og Linux, men også innen programmeringsspråk og plattformer for blogging (WordPress) og for nettbutikker (WooCommerce, Magento, PrestaShop).
Se alle innlegg av StealthDu kan også være interessert i...