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 !

  • Pingback: Gérer plusieurs tailles d'images personnalisées sur Wordpress()

  • rodskin

    rien n’empeche avec le code de @Fredzone de rajouter un paramètre
    function sgk_get_image($post_id, $image_size = ‘large’) {

    $image_url=wp_get_attachment_image_src(get_post_thumbnail_id(),$image_size);

    }

    par exemple et du coup si rien n’est renseigné on utilise la large 😀

    • semageek

      C’est clair, je vais intégrer ça aussi….

  • Pingback: Sunday Coffee #44 : Microsoft Surface, Windows Phone 8 et autres joyeusetés()

  • Pingback: Wordpress : générer les images à la une de ses anciens articles | Fredzone()

  • Steakalive

    Merci, j’en ai chié, mais j’y suis arrivé, car vous m’avez mis sur la bonne voie! Heureusement qu’il reste des gens comme vous pour partager savoir et recherches! encore merci.

    • Steakalive

      PS: vous devriez peut être revoir votre css, car le texte sort de la colonne et passe sous la pub de la colonne de droite. J’ai du faire un copier collé dans un éditeur pour pouvoir vous lire. je suis sous firefox 16.0.2.

  • merci, dommage que le texte de l’article sort du cadre, on ne peut pas tout lire.