Zgadzam się z Davidem-Bindą - świetne pytanie! Wielokrotnie napotkałem ten problem i wpadłem na rozwiązanie, które działa całkiem dobrze. Chociaż podoba mi się pomysł dodania krótkiego kodu w celu wstawienia obrazu z klasami, jak sugeruje pavlos-bizimis , nie sądzę, że tak naprawdę rozwiązuje ten problem tak elegancko, jak dodanie opcji do wyskakującego okienka edycji obrazu (na przykład prawdopodobnie będziesz musiał zawiń obraz w swoim krótkim kodzie, chyba że wolisz ręcznie wpisywać identyfikator obrazu). Ponadto, dla niektórych moich klientów nawet krótki kod jest zbyt skomplikowany (w takim przypadku możesz powiązać go z przyciskiem TinyMCE poza kursem).
W każdym razie bez zbędnych ceregieli - oto moje pięć centów. Korzystam z tego rozwiązania we wtyczce pokazu slajdów, która daje mi opcje włączenia / wyłączenia obrazu z pokazu slajdów i ustawienia koloru tła dla nakładki pokazującej zawartość niektórych pól meta obrazu. W zasadzie to na haki attachment_fields_to_edit
oraz attachment_fields_to_save
w celu dodania pól wejściowych i zapisać dane z formularza odpowiednio. Dane te będą dostępne jako standardowa meta post dla postu w załączniku (tj. Edytowany obraz). Jest to świetne, ponieważ można je łatwo odzyskać, get_post_meta()
jak zwykle. Powinieneś także dodać filtr do wp_get_attachment_image_attributes
lub, image_send_to_editor
który pozwoli ci automatycznie dodać odpowiednią klasę za każdym razem, gdy obraz jest wyprowadzany.
Zmodyfikowałem nieco kod w celu zwiększenia czytelności, więc niektóre części mogą być niekompletne / błędne.
/**
* 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);
AKTUALIZACJA : Właśnie skopiowałem ten kod, aby użyć go jako bojlera w projekcie, nad którym pracuję. Jak zapewne widać po zapoznaniu się z kodem, lubię przechowywać meta-klucze wpisu w zdefiniowanych stałych. Kiedy to robię, zawsze poprzedzam wartość, _
aby nie wyświetlała się w edytorze pól meta, ale ta praktyka może powodować pewne problemy attachment_fields_to_save
. Klucze w $form_fields
tablicy nie mogą zaczynać się od_
, dlatego należy uważać, aby używać różnych kluczy dla tablicy i wartości meta, lub przycinać podkreślenia podczas obsługi pól załączników. Ponieważ SLIDESHOW_EXCLUDE_IMAGE_KEY
w moim przykładzie nie jest nawet zdefiniowane, prawdopodobnie nie jest to wielka sprawa podczas kopiowania kodu, ale pomyślałem, że i tak o tym wspomnę. Zajęło mi to trochę czasu (i po raz drugi).