我同意david-binda - 好问题!我曾多次遇到这个问题,并提出了一个效果很好的解决方案。虽然我确实喜欢这样的想法,即添加一个快捷码来插入带有类的图像,如pavlos-bizimis 我认为它并没有像在图像编辑弹出窗口中添加选项那样优雅地解决这个问题(例如,除非您喜欢手动输入图像ID,否则您可能需要将图像包装在快捷码中)。此外,对于我的一些客户来说,即使是短代码也太复杂了(在这种情况下,您可以将其绑定到一个不正常的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: 我只是复制了这段代码,将其用作我正在进行的项目中的样板。从代码中可以看出,我喜欢将post元键存储在定义的常量中。当我这样做时,我总是用
_
防止它显示在元字段编辑器中,但这种做法可能会导致以下问题
attachment_fields_to_save
. 中的键
$form_fields
大堆
cannot start with _
, 因此,在处理附件字段时,请小心为数组和元值使用不同的键,或者修剪任何下划线。自从
SLIDESHOW_EXCLUDE_IMAGE_KEY
在我的示例中甚至没有定义这在复制代码时可能不是什么大问题,但我想我还是要提到它。我花了一段时间才弄明白这一点(这是第二次)。