Estoy de acuerdo con david-binda - ¡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 corto para insertar la imagen con 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 imágenes (por ejemplo, probablemente tenga que envuelva la imagen en su shortcode a menos que prefiera tener que ingresar una ID de imagen manualmente). Además, para algunos de mis clientes, incluso un código corto es demasiado complicado (en cuyo caso, podría vincularlo a un botón TinyMCE por supuesto).
De todos modos, sin más preámbulos, aquí están mis cinco centavos. Utilizo esta solución en un complemento de presentación de diapositivas que me da las opciones para incluir / excluir la imagen de la presentación de diapositivas y establecer un color de fondo para una superposición que muestra el contenido de algunos metacampos de imagen. Básicamente se conecta 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 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 de costumbre. Y también debe agregar un filtro wp_get_attachment_image_attributes
o image_send_to_editor
que le permita agregar la clase apropiada automáticamente cada vez que se emite la imagen.
He modificado ligeramente el código 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 meta de publicación en constantes definidas. Cuando hago esto, siempre antepongo el valor _
para evitar que se muestre en el editor de metacampos, pero esta práctica puede causar algunos problemas attachment_fields_to_save
. Las claves en la $form_fields
matriz no pueden comenzar_
, así que tenga cuidado de usar diferentes claves para la matriz y los metavalores o recorte los guiones bajos cuando trabaje con campos de datos adjuntos. Como SLIDESHOW_EXCLUDE_IMAGE_KEY
ni siquiera está definido en mi ejemplo, esto probablemente no sea un gran problema al copiar el código, pero pensé en mencionarlo de todos modos. Me tomó un tiempo resolver esto (y por segunda vez, en eso).