Я згоден з Девід-Бінда - чудове запитання! Я не раз стикався з цією проблемою і придумав рішення, яке працює досить добре. Хоча мені подобається додавати короткий код, щоб вставити зображення класами, як це запропонувало 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);
ОНОВЛЕННЯ : Я просто скопіював цей код, щоб використовувати його як котельну плиту в проекті, над яким я працюю. Як ви, напевно, можете сказати, дивлячись на код, я люблю зберігати свої мета-ключі пост у визначених константах. Коли я це роблю, я завжди додаю значення, _
щоб запобігти його відображенню в редакторі метаполів, але ця практика може викликати деякі проблеми з attachment_fields_to_save
. Клавіші в $form_fields
масиві не можуть починатися з цього_
, тому будьте обережні, використовуючи різні клавіші для масиву та мета-значень або обріжте будь-які підкреслення під час роботи з полями вкладень. Оскільки SLIDESHOW_EXCLUDE_IMAGE_KEY
в моєму прикладі навіть не визначено, це, мабуть, не є великою справою при копіюванні коду, але я думав, що це все одно згадаю. Мені знадобилося певний час, щоб розібратися в цьому (і вдруге).