Saya setuju dengan david-binda - pertanyaan bagus! Saya telah mengalami masalah ini pada beberapa kesempatan dan menghasilkan solusi yang bekerja cukup baik. Walaupun saya menyukai gagasan untuk menambahkan kode pendek untuk menyisipkan gambar dengan kelas-kelas seperti yang disarankan oleh pavlos-bizimis, saya tidak berpikir itu benar-benar menyelesaikan masalah dengan elegan seperti menambahkan opsi ke popup edit gambar (misalnya Anda mungkin harus bungkus gambar dalam kode pendek Anda kecuali Anda lebih suka memasukkan ID gambar secara manual). Juga, untuk beberapa klien saya bahkan kode pendek terlalu rumit (dalam hal ini Anda dapat mengikatnya ke tombol TinyMCE tentunya).
Lagi pula, tanpa basa-basi lagi - inilah lima sen saya. Saya menggunakan solusi ini dalam plugin tayangan slide yang memberi saya opsi untuk memasukkan / mengecualikan gambar dari tayangan slide dan mengatur warna latar belakang untuk tampilan yang menampilkan konten beberapa bidang meta gambar. Pada dasarnya itu menghubungkan ke attachment_fields_to_edit
dan attachment_fields_to_save
untuk menambahkan bidang input dan menyimpan data formulir masing-masing. Data ini akan tersedia sebagai meta posting standar untuk posting lampiran (yaitu gambar yang Anda edit). Ini bagus karena mudah diambil menggunakan get_post_meta()
seperti biasa. Dan Anda juga harus menambahkan filter wp_get_attachment_image_attributes
atau image_send_to_editor
yang akan memungkinkan Anda untuk menambahkan kelas yang sesuai secara otomatis setiap kali gambar di-output.
Saya telah memodifikasi kode sedikit agar mudah dibaca, jadi beberapa bagian mungkin tidak lengkap / salah.
/**
* 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);
UPDATE : Saya baru saja menyalin kode ini untuk menggunakannya sebagai boilerplate dalam proyek yang sedang saya kerjakan. Seperti yang Anda mungkin tahu dari melihat kode saya ingin menyimpan kunci meta posting saya dalam konstanta yang ditentukan. Ketika saya melakukan ini, saya selalu menambahkan nilai _
untuk mencegahnya muncul di editor bidang meta, tetapi praktik ini dapat menyebabkan beberapa masalah dengan attachment_fields_to_save
. Kunci dalam $form_fields
larik tidak dapat dimulai_
, jadi berhati-hatilah untuk menggunakan kunci yang berbeda untuk larik dan nilai meta atau pangkas garis bawah saat berurusan dengan bidang lampiran. Karena SLIDESHOW_EXCLUDE_IMAGE_KEY
bahkan tidak didefinisikan dalam contoh saya ini mungkin bukan masalah besar ketika menyalin kode, tapi saya pikir saya akan tetap menyebutkannya. Butuh beberapa saat untuk memikirkan hal ini (dan untuk kedua kalinya, pada saat itu).