Contenu principal
Drag & Drop for Post Thumbnails

Plugin Drag and Drop for Post Thumbnails, un petit hack

Drag & Drop for Post Thumbnails est un plugin qui ajoute une zone de dépôt en glisser/déposer à côté de l’éditeur, en lieu et place de la boîte « Image à la une », un raccourcis bien pratique pour attribuer une image à la une à un article, une page, ou autres contenus personnalisés.
Le but de cet article n’est pas de vous présenter le plugin mais de vous proposer un petit hack pour attribuer un titre à cette image en même temps.

Pour la petite histoire

Je suis en train de réaliser un site pour lequel j’essaie de simplifier au maximum l’administration pour que son propriétaire (n’étant pas familier avec les CMS) puisse poster ses articles sans aucune aide. Ce plugin m’a paru très bien dans ce sens (et je confirme), la personne n’a plus qu’à rentrer le titre de l’article, écrire quelques lignes, glisser une image.
Cependant, il reste un petit défaut. L’image à la une est utilisée dans le thème avec une lightbox, laquelle affiche le titre de l’image. Hors, le titre par défaut de l’image est défini par ses données EXIF, donc le titre affiché risque d’être le nom de l’appareil qui a pris la photo en gros ^^.

Utiliser le titre de l’article

Ce que je vous propose avec ce petit hook, c’est d’utiliser le titre de l’article à la place, et qu’il se mette à jour tout seul lorsque l’image est attachée via ce plugin. Par la même occasion, je vais aussi utiliser ce titre pour l’attribut « alt » de l’image.

Fonctionnement

Le code utilise la fonction du plugin qui attache l’image à l’article : on supprime l’action à laquelle est hookée la fonction, on copie la fonction et on la modifie, puis on la ré-attache à l’action initiale.
Le code est à coller dans le functions.php de votre thème comme d’habitude.

010203040506070809101112131415161718192021222324252627282930313233343536373839

// Take the post title and use it to set image title and alt
if ( is_admin() && function_exists('dragdrop_postthumbnail_attach_image') ) :

remove_action('wp_ajax_attach_image_to_post', 'dragdrop_postthumbnail_attach_image');
add_action('wp_ajax_attach_image_to_post', 'dragdrop_postthumbnail_attach_image_and_title');
function dragdrop_postthumbnail_attach_image_and_title() {

	$nonce = $_POST['_ajax_nonce'];
	$post_ID = intval($_POST['post_id']);
	$image_ID = intval($_POST['thumbnail_id']);

	if(! wp_verify_nonce($nonce, "dragdrop_postthumbnail_attach_image-$post_ID")){
		die('-1');
	}

	if ( !current_user_can( 'edit_post', $post_ID ) ){
		die( '-1' );
	}

	if(wp_verify_nonce($nonce, "dragdrop_postthumbnail_attach_image-$post_ID")){

		//attach image to post
		global $wpdb; 
		$sql = $wpdb->prepare("UPDATE $wpdb->posts SET post_parent = %d WHERE ID = %d LIMIT 1", $post_ID, $image_ID);
		$wpdb->query($sql);

		// Set title and alt attribute if post title is available
		if ( $post_title = esc_attr(get_post($post_ID)->post_title) ) {
			$sql2 = $wpdb->prepare("UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d LIMIT 1", $post_title, $image_ID);	// Image title
			//$sql2 = $wpdb->prepare("UPDATE $wpdb->posts SET post_title = %s, post_excerpt = %s WHERE ID = %d LIMIT 1", $post_title, $post_title, $image_ID);	// Image title + legend
			$wpdb->query($sql2);
			update_post_meta($image_ID, '_wp_attachment_image_alt', $post_title);	// Image alt
		}
		echo('1');
	}
	
}

endif;

La partie modifiée se situe après $wpdb->query($sql);. La partie $sql2 = $wpdb->prepare( ... ); attribue le titre. Au-dessous de cette ligne d’ailleurs j’ai ajouté une autre ligne similaire commentée, c’est pour ceux qui souhaiteraient remplir le champ « Légende » de l’image également : commenter la ligne précédente et décommenter celle-ci (il ne doit rester qu’un seul $sql2 = $wpdb->prepare( ... );).
Le update_post_meta( ) qui suit attribue le « alt ».

Seule précaution à prendre : d’abord remplir le titre de l’article lors de sa création ;)

See ya!