Sono d'accordo con David-Binda - ottima domanda! Ho riscontrato questo problema in diverse occasioni e ho trovato una soluzione che funziona abbastanza bene. Mentre mi piace l'idea di aggiungere un shortcode per inserire l'immagine con le classi come suggerito da pavlos-bizimis , non penso che risolva davvero il problema in modo elegante come aggiungere opzioni al popup di modifica dell'immagine (ad esempio probabilmente dovresti avvolgi l'immagine nel tuo shortcode a meno che tu preferisca inserire manualmente un ID immagine). Inoltre, per alcuni dei miei clienti anche uno shortcode è troppo complicato (nel qual caso potresti legarlo a un pulsante TinyMCE fuori rotta).
Comunque, senza ulteriori indugi, ecco i miei cinque centesimi. Uso questa soluzione in un plug-in di presentazione che mi dà la possibilità di includere / escludere l'immagine dalla presentazione e impostare un colore di sfondo per un overlay che mostra i contenuti di alcuni meta campi di immagini. Fondamentalmente si aggancia attachment_fields_to_edit
e attachment_fields_to_save
per aggiungere i campi di input e salvare rispettivamente i dati del modulo. Questi dati saranno disponibili come meta post standard per il post allegato (ovvero l'immagine che si sta modificando). Questo è fantastico poiché è facile da recuperare usando get_post_meta()
come al solito. E dovresti anche aggiungere un filtro wp_get_attachment_image_attributes
o image_send_to_editor
che ti permetterà di aggiungere automaticamente la classe appropriata ogni volta che l'immagine viene emessa.
Ho modificato leggermente il codice per renderlo leggibile, quindi alcune parti potrebbero essere incomplete / errate.
/**
* 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);
AGGIORNAMENTO : Ho appena copiato questo codice per usarlo come boilerplate in un progetto a cui sto lavorando. Come probabilmente puoi vedere guardando il codice, mi piace memorizzare le meta chiavi post in costanti definite. Quando lo faccio, antepongo sempre il valore _
per impedirne la visualizzazione nell'editor dei metacampi, ma questa pratica potrebbe causare alcuni problemi attachment_fields_to_save
. Le chiavi $form_fields
nell'array non possono iniziare con_
, quindi fai attenzione a usare chiavi diverse per l'array e i meta valori o rifinisci i caratteri di sottolineatura quando gestisci i campi degli allegati. Dal momento che SLIDESHOW_EXCLUDE_IMAGE_KEY
non è nemmeno definito nel mio esempio, questo probabilmente non è un grosso problema quando si copia il codice, ma ho pensato di menzionarlo comunque. Mi ci è voluto un po 'per capirlo (e per la seconda volta, in quello).