David-Binda'ya katılıyorum - harika soru! Bu sorunla birkaç kez karşılaştım ve oldukça iyi çalışan bir çözüm buldum. Pavlos-bizimis tarafından önerilen sınıflarla görüntüyü eklemek için bir kısa kod ekleme fikrini sevmekle birlikte, bu konuyu gerçekten görüntü düzenleme açılır penceresine seçenekler eklemek kadar zarif bir şekilde çözdüğünü düşünmüyorum (örneğin, muhtemelen manuel olarak bir resim kimliği girmek istemiyorsanız resmi kısa kodunuza sarın). Ayrıca, bazı müşterilerim için bir kısa kod bile çok karmaşık (bu durumda tabii ki bir TinyMCE düğmesine bağlayabilirsiniz).
Neyse, olmadan daha fazla uzatmadan ile - burada benim beş sent. Bu çözümü bana slayt gösterisinden görüntüyü dahil etme / hariç tutma ve bazı görüntü meta alanlarının içeriğini gösteren bir kaplama için bir arka plan rengi ayarlama seçenekleri sunan bir slayt gösterisi eklentisinde kullanıyorum. Temel olarak takar attachment_fields_to_edit
ve attachment_fields_to_save
giriş alanları eklemek ve sırasıyla form verilerini kaydetmek için. Bu veriler, ek gönderisi (yani düzenlemekte olduğunuz görüntü) için standart post meta olarak kullanılabilir. get_post_meta()
Her zamanki gibi kullanmak kolay olduğu için bu harika . Ayrıca , görüntüye her çıkış yapıldığında uygun sınıfı otomatik olarak eklemenize izin veren wp_get_attachment_image_attributes
veya buna bir filtre eklemeniz gerekir image_send_to_editor
.
Okunabilirlik için kodu biraz değiştirdim, bu yüzden bazı parçalar eksik / hatalı olabilir.
/**
* 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);
GÜNCELLEME : Üzerinde çalıştığım bir projede kaynak plakası olarak kullanmak için bu kodu kopyaladım. Muhtemelen koda bakarak anlatabileceğim gibi post meta anahtarlarımı tanımlanmış sabitlerde saklamak istiyorum. Bunu yaptığımda _
, meta alan düzenleyicide gösterilmesini önlemek için değeri her zaman ön planda tutarım , ancak bu uygulama bazı sorunlara neden olabilir attachment_fields_to_save
. Anahtarlar $form_fields
dizisi ile başlayamaz_
böylece, dizi ve meta değerleri için farklı tuşlarını kullanın veya ek alanları ile uğraşırken herhangi çizgi kırpmak için dikkatli olun. Örneğimde SLIDESHOW_EXCLUDE_IMAGE_KEY
bile tanımlanmadığından, bu kodu kopyalarken muhtemelen büyük bir anlaşma değil, ama yine de bahsettiğimi düşündüm. Bunu anlamak biraz zamanımı aldı (ve ikinci kez, o zaman).