[Résolu] Fonction pour lister les catégories et leur description

  • WordPress :5.2
  • Statut : résolu
6 sujets de 1 à 6 (sur un total de 6)
  • Auteur
    Messages
  • #2272696
    Marco6522
    Participant
    Initié WordPress
    3 contributions

    Bonjour,

    Je cherche un code de fonction pour lister les catégories si leur description existe.

    Pour l’instant j’ai ce code mais aucune liste n’apparaît :

    // ==================================================================
    // Fonction Lister catégories et leur description
    // ==================================================================
    function wpb_catlist_desc() { 
    $string = '<ul>';
    $catlist = get_terms( 'category' );
    $category_description = category_description();
    
    if ( ! empty( $catlist )) {
    
      foreach ( $catlist as $key => $item ) {
      
      if ( ! empty( $category_description )) {
        $string .= '<br /><br /><li><h2>'. $item->name . '</h2>';
        $string .= '<em>'. $item->description . '</em> </li>';
      }
    }
    }
    $string .= '</ul>';
    
    return $string; 
    }
    add_shortcode('wpb_categories', 'wpb_catlist_desc');

    Merci de votre aide

     

    #2272773
    ferman
    Participant
    Maître WordPress
    1250 contributions

    Bonjour,

    Pas très facile et je n’ai pas trouvé exactement d’où venait le problème. La fonction de base sans la condition sur “category_condition” fonctionne bien. Dès que l’on met la condition ça ne marche plus. Peut-être déjà car on ne peut  vraiment utiliser “empty()” que pour les arrays (les descriptions n’en sont  pas un). Je ne suis pas sûr de ça.

    On recommande alors d’utiliser “isset”, ce que j’ai fait et ça a marché …au début mais a créé pas mal de problèmes (liste toujours apparente malgré rafraîchissement de la page et même suppression de la fonction de functions.php!)  Je n’ai pas compris et n’ai pas insisté.

    Ce qui marche pour moi est le code suivant. Il faut faire de la mise en page bien sûr mais ce n’est pas un problème et il y a un petit texte (array) en trop qui apparaît sur l’écran qu’on ne peut pas faire partir mais que je ne trouve pas gênant.

    function display_cat_list (){
    
    global $wpdb;
    
    $catlist = $wpdb->get_results("SELECT name, description FROM wp_terms a LEFT JOIN  wp_term_taxonomy b ON a.term_id= b.term_id WHERE description NOT LIKE ''");
     
    	foreach ($catlist as $cat) {
    	
    	$catlist .= '<h2><li>'. '<br>'.$cat->name.'<br></h2>'.'<h3>'.$cat->description.'</li></h3>';}
    	
    	echo'<ul class="displaycat">';	
    	return $catlist;  
    	echo '</ul>';
    	
    }	
    add_shortcode('shortcode','display_cat_list');

     

    • Cette réponse a été modifiée le il y a 2 mois et 2 weeks par  ferman.
    #2272804
    Marco6522
    Participant
    Initié WordPress
    3 contributions

    Merci beaucoup pour le temps passé à résoudre le problème, mais votre code ne fonctionne pas chez moi : il n’affiche que le petit texte ‘array’ mais pas de liste.

    Fallait-il renseigné la ligne de code :

    <code class=" code-embed-code language-php"><span class="token function">get_results</span><span class="token punctuation">(</span><span class="token string">"SELECT name, description FROM wp_terms a LEFT JOIN  wp_term_taxonomy b ON a.term_id= b.term_id WHERE description NOT LIKE ''"</span><span class="token punctuation">)</span>

    Le code suivant liste les catégories et leur description, mais il les liste toutes, même quand il n’y a pas de description, et ce n’est pas le but recherché, car on ne veut lister que les catégories qui ont une description.

    // ==================================================================
    // Fonction Lister catégories et leur description (fonctionne)
    // ==================================================================
    function Wp_Liste_Categories() { 
    $string = '<ul>';
    $catlist = get_categories();
    if ( ! empty( $catlist )  ) {
      foreach ( $catlist as $key => $item ) {
        $string .= '<br /><br /><li><h2>'. $item->name . '</h2>';
        $string .= '<em>'. $item->description . '</em> </li>';
      }
    }
    $string .= '</ul>';
    
    return $string; 
    }
    add_shortcode('Liste_Categories', 'Wp_Liste_Categories');

    Des idées ?

    En vous remerciant

     

    #2272820
    ferman
    Participant
    Maître WordPress
    1250 contributions

    Bonjour,

    Le code devrait marcher. Je viens de le re-essayer (en copiant le code que je vous ai envoyé et en l’adaptant à mon site: shortcode et préfixe des tables)  A ce sujet  question peut-être bête mais vous n’auriez pas tout simplement oublié de modifier le préfixe wp des tables en votre préfixe car là vous ne verrez forcément que array (ce qui signifie que le shortcode est bon et que la fonction n’a pas de problème de codage mais qu’elle ne trouve rien). Vérifiez. Pour  l’autre question (la fonction “lister catégories et leur description”) c’est à peu de choses près la fonction <code class=”php plain”>wpb_catlist_desc décrite dans wp beginner . Il est normal qu’elle liste toutes les catégories puisqu’il n’y a aucune restriction  pour l’éviter.  C’est ce que vous avez essayé (de mettre des conditions) dans votre premier post. Comme je vous le disais j’ai aussi essayé: sans succès avec !empty et avec des résultats bizarres  avec “isset”.  Je suis sûr que c’est possible et je regarderai encore à tête reposée quand j’aurai le temps car le pb est intéressant. Par contre pour vous  avancer, j’ai cherché une alternative: ce que vous voulez faire est facile  à réaliser avec une requête sql (ce que je vous ai communiqué). Je suis surpris que ça ne marche pas car il n’y a vraiment rien de compliqué là dedans (et j’ai testé plusieurs fois lors de mes essais de mise en forme du résultat).

    • Cette réponse a été modifiée le il y a 2 mois et 2 weeks par  ferman.
    #2272942
    Marco6522
    Participant
    Initié WordPress
    3 contributions

    Oups !

    Effectivement, il fallait tout bêtement adapter le préfixe de table dans les chaînes ‘wp_terms’ et ‘wp_term_taxonomy’ de votre code.

    J’ai donc remplacé ‘wp‘ par le préfixe de la table attribué automatiquement par mon hébergeur et ça fonctionne très bien désormais 🙂

    Merci infiniment pour votre aide Ferman.

     

    • Cette réponse a été modifiée le il y a 2 mois et 2 weeks par  Marco6522.
    • Cette réponse a été modifiée le il y a 2 mois et 2 weeks par  Marco6522.
    #2272955
    ferman
    Participant
    Maître WordPress
    1250 contributions

    “et ça fonctionne très bien désormais”

    Ouf, le contraire aurait été surprenant et j’aurais dû sérieusement me remettre en question!

    Ne reste plus que la mise en forme avec les css  (la récré).

    Quant à la fonction d’origine, je ne vois pas de solution “simple” pour le moment.

    Si vous y pensez, pouvez-vous passer le sujet en [RESOLU].

    Merci.

     

    • Cette réponse a été modifiée le il y a 2 mois et 2 weeks par  ferman.
6 sujets de 1 à 6 (sur un total de 6)
  • Vous devez être connecté pour répondre à ce sujet.