Je suis d'accord avec David-Binda - excellente question! J'ai rencontré ce problème à plusieurs reprises et j'ai trouvé une solution qui fonctionne assez bien. Bien que j'aime l'idée d'ajouter un shortcode pour insérer l'image avec des classes comme suggéré par pavlos-bizimis, je ne pense pas que cela résout le problème aussi élégamment que l'ajout d'options au popup d'édition d'image (par exemple, vous auriez probablement à envelopper l'image dans votre shortcode, sauf si vous préférez saisir manuellement un ID d'image). De plus, pour certains de mes clients, même un shortcode est trop compliqué (auquel cas vous pouvez le lier à un bouton TinyMCE bien sûr).
Quoi qu'il en soit, sans plus tarder - voici mes cinq cents. J'utilise cette solution dans un plugin de diaporama qui me donne les options pour inclure / exclure l'image du diaporama et définir une couleur d'arrière-plan pour une superposition montrant le contenu de certains champs méta d'image. Fondamentalement, il se connecte à attachment_fields_to_edit
et attachment_fields_to_save
pour ajouter les champs de saisie et enregistrer respectivement les données du formulaire. Ces données seront disponibles en tant que méta de publication standard pour la publication de pièce jointe (c'est-à-dire l'image que vous modifiez). C'est génial car il est facile de récupérer en utilisant get_post_meta()
comme d'habitude. Et vous devez également ajouter un filtre à wp_get_attachment_image_attributes
ou image_send_to_editor
qui vous permettra d'ajouter automatiquement la classe appropriée à chaque sortie de l'image.
J'ai légèrement modifié le code pour plus de lisibilité, donc certaines parties peuvent être incomplètes / erronées.
/**
* Adds a form field for excluding images from slideshow
*
* @param array $form_fields Array of form fields
* @param object $post The post to show
* @return array Array of form fields
* @author Simon Fransson
**/
function hs_attachment_fields_to_edit($form_fields, $post = null)
{
$val = (boolean)get_post_meta($post->ID, SLIDESHOW_EXCLUDE_IMAGE_KEY, true);
$id = SLIDESHOW_EXCLUDE_IMAGE_KEY . "-" . $post->ID;
$markup = sprintf('<label for="%s"><input type="checkbox" class="checkbox" id="%s" name="attachments[%s][%s]" value="true" %s /> %s</label>', $id, $id, $post->ID, SLIDESHOW_EXCLUDE_IMAGE_KEY, checked($val, true, false), __('Exclude from slideshow', 'slideshow'));
$form_field = array(
'label' => __('Slideshow', 'slideshow'),
'input' => 'html',
'html' => $markup,
'value' => $val,
'helps' => __('Excludes the image from slideshows.', 'slideshow'),
);
$form_fields[SLIDESHOW_EXCLUDE_IMAGE_KEY] = $form_field; // See update notice below code block!
return $form_fields;
}
add_filter('attachment_fields_to_edit', 'hs_attachment_fields_to_edit', 10, 2);
/**
* Save the images exclude status meta value when saving attachment data
*
* @param object $post Post object
* @param array $attachment Field values
* @return object Post object
* @author Simon Fransson
**/
function hs_attachment_fields_to_save($post, $attachment = null)
{
update_post_meta($post['ID'], SLIDESHOW_EXCLUDE_IMAGE_KEY, intval(isset($attachment[SLIDESHOW_EXCLUDE_IMAGE_KEY])));
return $post;
}
add_filter('attachment_fields_to_save', 'hs_attachment_fields_to_save', 10, 2);
/**
* Generate metadata for newly uploaded attachment.
* This is here simply because we are dealing with a boolean,
* which means that for SQL related reasons a value NEEDS to
* exist even when noting has been specified in the options
*
* @param array $metadata Array of meta data
* @param int $attachment_id ID of attachment post
* @return array Array of meta data
* @author Simon Fransson
**/
function hs_generate_attachment_metadata($metadata, $attachment_id = null)
{
$exclude = intval(get_post_meta($attachment_id, SLIDESHOW_EXCLUDE_IMAGE_KEY, true));
update_post_meta($attachment_id, SLIDESHOW_EXCLUDE_IMAGE_KEY, $exclude);
return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'hs_generate_attachment_metadata', 10, 2);
MISE À JOUR : Je viens de copier ce code pour l'utiliser comme passe-partout dans un projet sur lequel je travaille. Comme vous pouvez probablement le constater en regardant le code, j'aime stocker mes méta-clés post dans des constantes définies. Lorsque je fais cela, je ajoute toujours la valeur avec _
pour l'empêcher de s'afficher dans l'éditeur de métadonnées, mais cette pratique peut entraîner des problèmes avec attachment_fields_to_save
. Les clés du $form_fields
tableau ne peuvent pas commencer par_
, alors faites attention à utiliser des clés différentes pour le tableau et les métadonnées ou coupez les traits de soulignement lorsque vous traitez des champs de pièce jointe. Étant donné que ce SLIDESHOW_EXCLUDE_IMAGE_KEY
n'est même pas défini dans mon exemple, ce n'est probablement pas un gros problème lors de la copie du code, mais j'ai pensé que je le mentionnerais quand même. Il m'a fallu un certain temps pour comprendre cela (et pour la deuxième fois, à ce sujet).