Estoy de acuerdo con david-binda : ¡una gran pregunta! Me he encontrado con este problema en varias ocasiones y he encontrado una solución que funciona bastante bien. Si bien me gusta la idea de agregar un código abreviado para insertar la imagen con las clases como lo sugiere pavlos-bizimis No creo que realmente resuelva el problema con tanta elegancia como agregar opciones a la ventana emergente de edición de imagen (por ejemplo, probablemente tendría que ajustar la imagen en su código abreviado a menos que prefiera ingresar una identificación de imagen manualmente). Además, para algunos de mis clientes, incluso un código breve es demasiado complicado (en cuyo caso podría enlazarlo a un botón TinyMCE, por supuesto).
De todos modos, sin con más dilación, aquí están mis cinco centavos. Utilizo esta solución en un complemento de presentación de diapositivas que me brinda las opciones para incluir / excluir la imagen de la presentación de diapositivas y establecer un color de fondo para una superposición que muestre el contenido de algunos campos de metáforos de imagen. Básicamente, se enlaza con attachment_fields_to_edit
y attachment_fields_to_save
para agregar los campos de entrada y guardar los datos del formulario respectivamente. Estos datos estarán disponibles como meta estándar para la publicación adjunta (es decir, la imagen que está editando). Esto es genial ya que es fácil de recuperar usando get_post_meta()
como siempre. Y también debe agregar un filtro a wp_get_attachment_image_attributes
o image_send_to_editor
que permitirá debe agregar la clase apropiada automáticamente cada vez que se emita la imagen.
He modificado el código ligeramente para facilitar la lectura, por lo que algunas partes pueden estar incompletas / erróneas.
/**
* 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);
ACTUALIZACIÓN : acabo de copiar este código para usarlo como repetitivo en un proyecto en el que estoy trabajando. Como probablemente pueda ver al mirar el código, me gusta almacenar mis claves de metadatos en constantes definidas. Cuando hago esto, siempre antepago el valor con _
para evitar que se muestre en el editor de campos de metadatos, pero esta práctica puede causar algunos problemas con attachment_fields_to_save
. Las claves en $form_fields
array no pueden comenzar con _
, así que tenga cuidado de usar claves diferentes para la matriz y los valores meta o recorte los guiones bajos al tratar con los campos adjuntos. Como SLIDESHOW_EXCLUDE_IMAGE_KEY
ni siquiera está definido en mi ejemplo, probablemente no sea un gran problema al copiar el código, pero pensé que lo mencionaría de todos modos. Me tomó un tiempo resolver esto (y por segunda vez, en eso).