ฉันเห็นด้วยกับDavid-Binda - เป็นคำถามที่ดีมาก! ฉันพบปัญหานี้หลายครั้งและหาวิธีแก้ปัญหาที่ใช้งานได้ดี ในขณะที่ฉันชอบความคิดในการเพิ่มรหัสย่อเพื่อแทรกรูปภาพพร้อมคลาสตามที่แนะนำโดยpavlos-bizimisฉันไม่คิดว่ามันจะแก้ปัญหาได้อย่างหรูหราเหมือนการเพิ่มตัวเลือกในป๊อปอัปแก้ไขภาพ (ตัวอย่างเช่นคุณอาจต้อง ตัดภาพในรหัสย่อของคุณเว้นแต่คุณต้องการใส่รหัสภาพด้วยตนเอง) นอกจากนี้สำหรับลูกค้าบางคนของฉันแม้แต่รหัสย่อก็ซับซ้อนเกินไป (ในกรณีนี้คุณสามารถผูกมันไว้กับปุ่ม TinyMCE นอกหลักสูตร)
อย่างไรก็ตามโดยไม่ต้องกังวลใจต่อไป - นี่คือห้าเซ็นต์ของฉัน ฉันใช้โซลูชันนี้ในปลั๊กอินสไลด์โชว์ซึ่งให้ตัวเลือกแก่ฉันในการรวม / แยกภาพออกจากสไลด์โชว์และตั้งค่าสีพื้นหลังสำหรับภาพซ้อนทับที่แสดงเนื้อหาของเมตาภาพบางฟิลด์ โดยพื้นฐานแล้วจะมีการเชื่อมต่อattachment_fields_to_edit
และattachment_fields_to_save
เพื่อเพิ่มฟิลด์อินพุตและบันทึกข้อมูลฟอร์มตามลำดับ ข้อมูลนี้จะสามารถใช้เป็นเมตาโพสต์มาตรฐานสำหรับโพสต์ไฟล์แนบ (เช่นรูปภาพที่คุณกำลังแก้ไข) นี่เป็นเรื่องที่ยอดเยี่ยมเพราะมันง่ายต่อการดึงข้อมูลกลับมาใช้get_post_meta()
ตามปกติ และคุณควรเพิ่มตัวกรองwp_get_attachment_image_attributes
หรือimage_send_to_editor
จะอนุญาตให้คุณเพิ่มคลาสที่เหมาะสมโดยอัตโนมัติทุกครั้งที่มีการส่งรูปภาพ
ฉันได้แก้ไขรหัสเล็กน้อยเพื่อให้สามารถอ่านได้ดังนั้นบางส่วนอาจไม่สมบูรณ์ / ผิดพลาด
/**
* 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 : ฉันเพิ่งคัดลอกรหัสนี้เพื่อใช้เป็นต้นแบบในโครงการที่ฉันกำลังทำงานอยู่ อย่างที่คุณสามารถบอกได้จากการดูรหัสฉันชอบเก็บคีย์เมตาโพสต์ของฉันในค่าคงที่ที่กำหนดไว้ เมื่อผมทำเช่นนี้ฉันมักจะย่อหน้าค่าด้วย_
เพื่อป้องกันไม่ให้แสดงในตัวแก้ไขช่องเมตา attachment_fields_to_save
แต่การปฏิบัตินี้อาจก่อให้เกิดปัญหาบางอย่างกับ คีย์ใน$form_fields
อาเรย์ไม่สามารถเริ่มต้นได้_
ดังนั้นควรใช้คีย์ที่แตกต่างกันสำหรับค่าอาเรย์และเมตาดาต้า เนื่องจากSLIDESHOW_EXCLUDE_IMAGE_KEY
ไม่ได้กำหนดไว้ในตัวอย่างของฉันนี่อาจไม่ใช่เรื่องใหญ่เมื่อคัดลอกรหัส แต่ฉันคิดว่าฉันจะพูดถึงมันต่อไป ฉันต้องใช้เวลาสักพักกว่าจะคิดออก (และครั้งที่สองในตอนนั้น)