Я согласен с Давид-Бинда - отличный вопрос! Я неоднократно сталкивался с этой проблемой и нашел решение, которое работает довольно хорошо. Хотя мне нравится идея добавления шорткода для вставки изображения с классами, как это предлагает 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
в моем примере это даже не определено, это, вероятно, не имеет большого значения при копировании кода, но я решил упомянуть об этом в любом случае. Мне потребовалось некоторое время, чтобы понять это (и во второй раз, причем).