WordPress : Attention : count() : problème de syntaxe de la fonction count()

Publié par Jean-Michel le

J’essaie de réparer une fonction qui fonctionnait correctement avant de passer à php 7.2. L’erreur vient de la fonction count() mais je ne sais pas comment la réécrire. Pouvez-vous m’aider ?

Voici le message d’erreur : Attention : count() : Le paramètre doit être un tableau ou un objet qui implémente Countable in…

Cette fonction fait partie du code pour afficher une page au-dessus d’une catégorie.

  • is_category : si la page actuelle est une catégorie
  • id : identifiant de la catégorie
  • title : Titre de la catégorie
private function get_category($id_cat = false){
        $Category = new stdClass();
        $Category->is_category = false;
        $Category->id = 0;
        $Category->title = '';
        if (( is_category())||(is_tax('portfolio_categories'))) {
            $Category->is_category = true;
        }
        if ($id_cat === false) {
            $cat = single_cat_title("",false);
        }
        else{
            if ( (int) $id_cat > 0) {
                $cat = get_cat_name($id_cat);
            }
            else{
                return $Category;
            }
        }
        $page_id = false;
        $titre_page = sanitize_title($cat);

        global $wpdb;
        $req = $wpdb->prepare("SELECT ID FROM {$wpdb->prefix}posts WHERE post_name=%s AND post_content != '' AND post_type = 'page' AND post_status = 'publish'", $titre_page);
        $page = $wpdb->get_row($req);
        $Category->id = (count($page) > 0) ? $page->ID : 0;
        $Category->title = $titre_page;
        return $Category;
    }

Je ne suis pas un développeur php, alors merci pour votre indulgence

Solution n°1 trouvée

Essayez de remplacer ceci dans le code d’origine :

$page = $wpdb->get_row($req);

avec ça:

$page = $wpdb->get_row($req, ARRAY_A);

Cela lui fera retourner un tableau au lieu d’un objet.

Ensuite, vous pouvez suivre ceci:

if ($page && isset($page['ID'])) {
    $category->id = $page['ID'];
} else {$category->id = 0;}

Solution n°2 trouvée

J’ai remplacé la ligne incriminée

$Catégorie->id = (count($page) > 0) ? $page->ID : 0;

avec

si (asset($page)){
$Catégorie->id = $page->ID ;
}
autre {
$Catégorie->id = 0 ;
}

Je ne suis pas sûr de la syntaxe, mais ça marche

Documentation : [https://www.php.net/manual/fr/function.count.php][1]

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *