WordPress : Ajouter une image aux catégories

24 juin 2013 - 387 mots - wordpress

Avec WordPress, la personnalisation d’un site peut aller très loin. Dans cet article, nous allons parler images, articles et catégories.
Voici l’état des lieux :

  • Actuellement, ni les articles ni les images n’ont d’images liés.
  • Dans le futur, un article pourra avoir une image liée (image à la une) ;
  • Si ce n’est pas le cas, on utilisera l’image liée à la catégorie de l’article.

Comment allons nous faire ?

Toutes les modifications se font dans le fichier functions.php de votre thème WordPress.

Activer le support des images à la une dans le thème WordPress

On active les miniatures pour les articles.

1
add_theme_support('post-thumbnails', array('post'));

On définit les tailles des miniatures

1
set_post_thumbnail_size(100, 100);

Désormais, nous avons, pour les articles, la possibilité d’avoir une image à la une.

Lier une image à une catégorie

On crée un hook pour s’intégrer au formulaire d’édition de la catégorie dans le BO WordPress :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function fnAction_edit_category_form_fields($poTag){
  $arrCategoryImages = get_option('category_url_images');
  if(is_array($arrCategoryImages) && array_key_exists($poTag->term_id, $arrCategoryImages)){
    $psURL = $arrCategoryImages[$poTag->term_id] ;
  } else {
    $psURL = '';
  }
?>
  <table class="form-table">
    <tbody>
      <tr class="form-field form-required">
        <th valign="top" scope="row">
          <label for="category_url_image"><?php _e('Image'); ?></label>
        </th>
        <td>
          <input id="category_url_image" name="category_url_image" type="text" value="<?php echo $psURL; ?>" />
          <p class="description"><?php _e('Cette URL représenté l\'image liée à notre catégorie.'); ?></p>
        </td>
      </tr>
    </tbody>
  </table>  
<?php
}
add_action('edit_category_form_fields', 'fnAction_edit_category_form_fields');

On crée un hook qui s’activera lors de la sauvegarde d’une catégorie :

1
2
3
4
5
6
7
8
function fnAction_edited_category($piIDTerm){
  if(isset($_POST['category_url_image'])){
    $arrCategoryImages = get_option('category_url_images');
    $arrCategoryImages[$piIDTerm] = $_POST['category_url_image'];
    update_option('category_url_images', $arrCategoryImages);
  }
}
add_action('edited_category', 'fnAction_edited_category');

Récupérer l’image à la une ou l’image de la catégorie

Pour cela, j’ai crée une fonction qui retourne d’abord si elle est présente l’image à la une sinon l’image liée à la catégorie.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
function fnWP_getOGImage(){
  if((function_exists('has_post_thumbnail')) && (has_post_thumbnail())) { 
    $imageData = wp_get_attachment_image_src(get_post_thumbnail_id (get_the_ID()), 'thumbnail');
    return $imageData[0];
  } else {
    $oCategory = get_the_category(get_the_ID());
    if($oCategory){
      $arrCategoryImages = get_option('category_url_images');
      if(is_array($arrCategoryImages) && array_key_exists($oCategory[0]->term_id, $arrCategoryImages)){
        return $arrCategoryImages[$oCategory[0]->term_id] ;
      } else {
        return '';
      }
    }
  }
  return '';
}

Désormais, à vous de jouer ! Dans mon cas, j’ai intégré cela dans mon header pour gérer les og:image de Facebook.

Commentaires

LN
LN

Mais ça, l’histoire des miniatures, la plupart des thèmes le propose par défaut, non ? (enfin en tout cas moi je la vois souvent par défaut)

A moins que l’idée soit de proposer une seule image commune à tous les articles d’une même catégorie ?

24 juin 2013 à 15:08


Progi1984
Progi1984

Erreur. Cela est proposé si cela a été développé dans le thème.

De plus, associer une image à une catégorie permet qu’un article ait une image même si l’article n’a pas d’image à la une.

26 juin 2013 à 10:54


LN
LN

oki dac, je vois mieux l’intérêt de la chose 😉

1 juillet 2013 à 15:50


biboupat
biboupat

Merci pour ce tuto mais où est-ce que je met ces lignes de code dans le fichier fonction.php de mon thème ?? J’utilise « Twenty Thirteen » !
J’ai tout mi dans le fichier fonction.php de mon thème. J’ai bien la ligne dans catégories pour ajouter le lien vers une image de médias. Mais je ‘nai toujours pas d’image à la une de l’article de le catégorie concernée. Je n’ai pas mi d’image à la une dans l’article pour justement n’avoir que l’image de la catégorie. Je comprend pas où mettre ce code sur mon thème ??

Merci

2 septembre 2013 à 19:22


Progi1984
Progi1984

Bonjour

Pour le code, il est à mettre dans le fichier functions.php du thème.

Pour avoir l’OG Image, il faut ajouter cela dans le fichier header.php du thème entre les balises &

1
2
3
4
5
6
7
<?php if(is_single()): ?>
  <?php $ogImage = fnWP_getOGImage(); ?>
  <?php if(!empty($ogImage)): ?>
  <meta content="<?php echo $ogImage; ?/>" property="og:image"></meta>
  <meta content="<?php echo $ogImage; ?/>" property="twitter:image:src"></meta>
  <?php endif; ?>
<?php endif; ?>

8 septembre 2013 à 17:51


jean-luc
jean-luc

cela fonctionne t il pour les articles déjà écrits ?
sur http://test.jbmm.fr/category/business
je ne vois pas le résultat….
merci

22 octobre 2013 à 10:29


Progi1984
Progi1984

De mémoire, cela fonctionne bien.
Qu’avez vous fait ?
Avez vous bien ajouté l’URL d’une image dans la catégorie ?
Avez vous bien affiché cette image dans votre thème ?

17 décembre 2013 à 23:30


edouard
edouard

Bonjour, je cherche a mettre une image a la une pour chaque catégories.
j ‘ai donc suivi votre tuto mais je ne comprend pas la fin. l’image ne s’affiche pas, par contre j’ai bien la possibilité de mettre l’url de l’image dans le B.O.

ou je doit mettre ceci:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
function fnWP_getOGImage(){
  if((function_exists('has_post_thumbnail')) && (has_post_thumbnail())) {
    $imageData = wp_get_attachment_image_src(get_post_thumbnail_id (get_the_ID()), 'thumbnail');
    return $imageData[0];
  } else {
    $oCategory = get_the_category(get_the_ID());
    if($oCategory){
      $arrCategoryImages = get_option('category_url_images');
      if(is_array($arrCategoryImages) && array_key_exists($oCategory[0]->term_id, $arrCategoryImages)){
        return $arrCategoryImages[$oCategory[0]->term_id] ;
      } else {
        return '';
      }
    }
  }
  return '';
}

et ceci est il necessaire:

1
2
<meta property="og:image" content=""/>
<meta property="twitter:image:src" content=""/>

merci pour votre réponse qui va je l’espère m’éclairer.

3 mai 2014 à 15:13


Progi1984
Progi1984

Bonjour,

Cette fonction est à mettre dans le fichier functions.php de votre thème.
Pour afficher l’image, vous devez utilisez la fonction en situation.

Ainsi, appeler le code PHP dans votre balise meta ou dans une balise img.

1
2
3
4
## A l'intérieur de la balise HEAD
<meta property="og:image" content="<?php echo fnWP_getOGImage() ?>"/>
## A l'intérieur de la balise BODY
<img src="<?php echo fnWP_getOGImage() ?>"/>

Les balises meta sont nécessaires si vous souhaitez supporter les Twitter Cards.

5 mai 2014 à 15:48


Eric
Eric

Bonjour,
je cherche à afficher dans un post la liste des catégories associées avec leurs images ?
pouvez-vous me dire ce que je doit mettre ?
merci beaucoup

27 mai 2015 à 16:56


Sebastien
Sebastien

Bonjour,
merci pour cette précieuse aide, ça marche nickel jusque là. Petite question cependant: Si je veux afficher cette image sur la page de catégorie, à quelle fonction dois-je faire appel ?
the_post_thumbnail?
n’a pas l’air de fonctionner
Pour la précision, j’aimerai la faire afficher entre le titre et la description comme dans un article
Merci d’avance

29 novembre 2017 à 21:43


Laisser un commentaire

Merci. Votre message a bien été enregistré.