WordPress : Générer des « images à une » à partir de l’URL d’un fichier image

Depuis l’arrivée de la fonction « Image à la une » dans WordPress, je me suis retrouvé avec un dilemme car j’utilisais depuis longtemps une fonction équivalente, codé à la hache par mes soins, qui récupérait l’url d’une image contenue dans un champ personnalisé. Il me fallait donc trouver une solution efficace pour migrer cela facilement et rapidement.
Set_the_post_thumbnail
Il n’existe pas une fonction permettant de réaliser l’ajout d’un thumnbail dans un post facilement du type « set_the_post_thumbnail() » pourtant, la fonction « get_the_post_thumbnail() » existe bel et bien.
En allant voir le Codex du codex wordpress pour analyser cette dernière, on peut trouver sa source dans « wp-includes/post-thumbnail-template.php »
On peut voir que la fonction ne fait que nous retourner le contenu d’un champ personnalisé nommé « _thumbnail_id« .
Donc, si l’on souhaite affecter une « Image à la une » à un article, il suffit simplement de rajouter un champ personnalisé contenant l’ID de l’image et se nommant « _thumbnail_id« , voilà déjà 50% de ma solution.
Nous créons donc la fonction set_the_post_thumbnail suivante dans notre fichier fonctions.php
set_the_post_thumbnail($post_id, $image_id){ add_post_meta($post_id,'_thumbnail_id', $image_id, true); }get_attachment_id_from_src
Comme, je vous l’ai indiqué, je stockais l’url de mon image à mettre en avant dans un champ personnalisé et maintenant, j’ai besoin de disposer de l’ID de l’image. Il va donc me falloir trouver un moyen d’extraire l’ID d’une image à partir de son url.
Comme je suis assez faignant dans l’âme, j’ai trouvé le bout de code qui fait mon bonheur sur core.trac.wordpress.org.
Ce code va donc me permettre de trouver l’ID d’une image source très simplement.
function get_attachment_id_from_src ($image_src) { global $wpdb; $query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'"; $id = $wpdb->get_var($query); return $id; }sgk_get_image
sgk_get_image est le nom de la fonction qui me permettait avant de récupérer l’url d’une miniature en fonction de l’ID d’un post, il va simplement falloir la modifier pour générer au fil du temps les « Images à la une » automatiquement. L’URL de l’image était contenu dans le champ personnalisé ‘screen’, il vous suffira d’adapter ce champ pour l’adapter à votre besoin.
function sgk_get_image($post_id){ //on verifie que le thumb n'existe pas déjà $image_thumb=get_post_meta($post_id, '_thumbnail_id', true); if ($image_thumb=='') { //On verifie si un champ perso existe $image_post=get_post_meta($post_id, 'screen', true); if ($image_post=='') { //on affecte une image par defaut $image_post="http://www.semageek.com/blank.jpg"; return $image_post; } else { //on génére le thumb sgk_generate_thumb_post($post_id,$image_post) ; return $image_post; } } $image_url=wp_get_attachment_image_src(get_post_thumbnail_id(),'large'); return ($image_url[0]); }Dans l’exemple ci-dessus, j’utilise la variable ‘large’ pour définir la taille de cette image, mais je vous conseille de lire cet article Gérer plusieurs tailles d ’images personnalisées sur WordPress, il va vous permettre d’affecter plusieurs tailles facilement à vos miniatures pour une meilleure intégration.
That’s All Folks !
- Annonce -