Tôi đồng ý với david-binda - câu hỏi tuyệt vời! Tôi đã gặp phải vấn đề này trong một số trường hợp và đưa ra một giải pháp hoạt động khá tốt. Mặc dù tôi thích ý tưởng thêm một shortcode để chèn hình ảnh với các lớp theo đề xuất của pavlos-bizimis Tôi không nghĩ rằng nó thực sự giải quyết vấn đề một cách tao nhã như việc thêm các tùy chọn vào cửa sổ bật lên chỉnh sửa hình ảnh (ví dụ bạn có thể phải bọc hình ảnh trong shortcode của bạn trừ khi bạn muốn nhập ID hình ảnh theo cách thủ công). Ngoài ra, đối với một số khách hàng của tôi, ngay cả một shortcode cũng quá phức tạp (trong trường hợp đó bạn có thể liên kết nó với nút TinyMCE ngoài khóa học).
Dù sao, không cần phải quảng cáo thêm - đây là năm xu của tôi. Tôi sử dụng giải pháp này trong plugin trình chiếu cung cấp cho tôi các tùy chọn để bao gồm / loại trừ hình ảnh khỏi trình chiếu và đặt màu nền cho lớp phủ hiển thị nội dung của một số trường meta hình ảnh. Về cơ bản, nó móc vào attachment_fields_to_edit
và attachment_fields_to_save
để thêm các trường đầu vào và lưu dữ liệu biểu mẫu tương ứng. Dữ liệu này sẽ có sẵn dưới dạng meta bài đăng tiêu chuẩn cho bài đăng đính kèm (tức là hình ảnh bạn đang chỉnh sửa). Điều này thật tuyệt vì nó dễ dàng lấy lại get_post_meta()
như bình thường. Và bạn cũng nên thêm một bộ lọc vào wp_get_attachment_image_attributes
hoặc image_send_to_editor
sẽ cho phép bạn tự động thêm lớp thích hợp mỗi khi hình ảnh được xuất ra.
Tôi đã sửa đổi mã một chút để dễ đọc, vì vậy một số phần có thể không đầy đủ / sai sót.
/**
* 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);
CẬP NHẬT : Tôi vừa sao chép mã này để sử dụng nó như bản tóm tắt trong một dự án tôi đang làm việc. Như bạn có thể biết khi nhìn vào mã tôi muốn lưu trữ các khóa meta bài đăng của mình trong các hằng số xác định. Khi tôi làm điều này, tôi luôn luôn chuẩn bị giá trị _
để ngăn nó hiển thị trong trình chỉnh sửa trường meta, nhưng thực tế này có thể gây ra một số vấn đề với attachment_fields_to_save
. Các khóa trong $form_fields
mảng không thể bắt đầu bằng_
, vì vậy hãy cẩn thận sử dụng các khóa khác nhau cho các giá trị mảng và meta hoặc cắt bất kỳ dấu gạch dưới nào khi xử lý các trường đính kèm. Vì SLIDESHOW_EXCLUDE_IMAGE_KEY
thậm chí không được định nghĩa trong ví dụ của tôi nên điều này có lẽ không phải là vấn đề lớn khi sao chép mã, nhưng tôi nghĩ dù sao tôi cũng sẽ đề cập đến nó. Tôi phải mất một thời gian để tìm ra điều này (và lần thứ hai, tại đó).