Afficher les sous catégories avec une image

Voici une fonction pour afficher sur une page catégorie, d’abord les sous catégories avec  leur thumbnail, plutot que directement tous les articles liés à cette catégorie.

<?php $uploads = wp_upload_dir(); $upload_path = $uploads['url']; global $ancestor; $childcats = get_categories('child_of=' . $cat . '&hide_empty=1'); foreach ($childcats as $childcat) { $catdesc = $childcat->category_description;
    $catname = $childcat->cat_name;
    if (cat_is_ancestor_of($ancestor, $childcat->cat_ID) == false) {
        echo '
<br />
<div class="sub-block" id='. $catname.'"><a href="' . get_category_link($childcat) . '" title="' . strip_tags($catdesc) . '">
            <img class="sub-img" src="' . $upload_path . '/' . $catname . '.jpg" alt="' . $childcat->cat_name . '" class="front-img" width="250" /></a>

<br />
<div class="inner">
<br />
<h2 class="category-image-title">' . $catname . '</h2>
<p>

            
        <span class="category-image-description">' . $catdesc . '</span></div>
<p>
</div>
<p>
';

        $ancestor = $childcat->cat_ID;
    }
}
?>

Voici une page d’exemple ou j’ai appliqué ce code:

Asie virtual v2

je suis sur une page: category/asie et je vois bien mes sous catégories avec leur images respectives.

Une alternative avec le dossier image du thème

Cette façon de faire a un principal inconvénient c’est qu’il est ensuite difficile de retrouver ses images parmi tous les dossiers du folder « upload ».De manière plus pratique on peut cibler directement le dossier image du thème, au même niveau que le dossier js ou css par exemple, et aller chercher les images directement dans ce dossier.Ainsi on le regroupe toutes au même endroits et c’est plus simple de s’y retrouver .Voici un exemple de code, vraiment pas propre, mais qui montre comment on peut cibler le dossier image et ainsi  attribuer des images à nos catégories.Le principe ici est le même, on nomme nos images exactement comme nos catégories

<?php   
if (is_category(array('votre_categorie_1','votre_categorie_2','etc...'))):;?>
<?php    $uploads = get_template_directory_uri().'/img';

global $ancestor;
$childcats = get_categories('child_of=' . $cat . '');
foreach ($childcats as $childcat) {
$catdesc = $childcat->category_description;
$catname = $childcat->cat_name;
if (cat_is_ancestor_of($ancestor, $childcat->cat_ID) == false) {
echo '<div class="sub-block" id="' . $catname . '">
<a href="' . get_category_link($childcat) . '" title="' . strip_tags($catdesc) . '"><br/>
<img class="sub-img" src="' . $uploads . '/' . $catname . '.jpg" alt="' . $childcat->cat_name . '" class="front-img" width="759" height:"506" />
</a>
<div class="inner" >
<h2 class="category-image-title">' . $catname . '</h2>
<br/><span class="category-image-description">' . $catdesc . '</span></div></div>';
$ancestor = $childcat->cat_ID;
}
}
?>
<?php else: ?>
<?php 
 etc.....

Ce n’est clairement pas le meilleur système, on pourrait plutot rajouter un champ input dans la page d’édition de la catégorie pour y mettre un url par exemple , le mieux étant d’intégrer directement dans la page d’édition de la catégorie un uploader de média, comme le font les plugins dédiés.

La solution idéale est d’utiliser le plugin ACF, avec lequel on peut très facilement arriver au même résultat.Voici le tuto

 

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.