Concordo com david-binda - ótima pergunta! Eu já me deparei com esse problema em várias ocasiões e encontrei uma solução que funciona muito bem. Embora eu goste da ideia de adicionar um código de acesso para inserir a imagem nas classes, conforme sugerido por pavlos-bizimis , não acho que realmente resolva o problema com a mesma elegância de adicionar opções ao pop-up de edição de imagens (por exemplo, você provavelmente precisaria agrupe a imagem em seu código de acesso, a menos que você prefira ter que inserir um ID de imagem manualmente). Além disso, para alguns de meus clientes, mesmo um código curto é muito complicado (nesse caso, você pode vinculá-lo a um botão TinyMCE, é claro).
Enfim, sem mais delongas - aqui estão meus cinco centavos. Eu uso essa solução em um plug-in de apresentação de slides, que me oferece as opções para incluir / excluir a imagem da apresentação de slides e definir uma cor de plano de fundo para uma sobreposição, mostrando o conteúdo de alguns meta-campos de imagem. Basicamente, ele se conecta a attachment_fields_to_edit
e attachment_fields_to_save
para adicionar os campos de entrada e salvar os dados do formulário, respectivamente. Esses dados estarão disponíveis como meta de postagem padrão para a postagem de anexo (ou seja, a imagem que você está editando). Isso é ótimo, pois é fácil recuperar usando get_post_meta()
como de costume. E você também deve adicionar um filtro wp_get_attachment_image_attributes
ou image_send_to_editor
que permita adicionar a classe apropriada automaticamente sempre que a imagem estiver sendo impressa.
Modifiquei um pouco o código para facilitar a leitura, portanto, algumas partes podem estar incompletas / incorretas.
/**
* 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);
ATUALIZAÇÃO : Acabei de copiar esse código para usá-lo como padrão em um projeto em que estou trabalhando. Como você provavelmente pode perceber olhando para o código, eu gosto de armazenar minhas meta-chaves pós em constantes definidas. Quando faço isso, sempre prefixo o valor com _
para impedir que ele seja exibido no editor de meta campos, mas essa prática pode causar alguns problemas attachment_fields_to_save
. As chaves na $form_fields
matriz não podem ser iniciadas_
, portanto, tenha cuidado ao usar chaves diferentes para a matriz e os valores meta ou aparar os sublinhados ao lidar com campos de anexo. Como SLIDESHOW_EXCLUDE_IMAGE_KEY
nem sequer está definido no meu exemplo, isso provavelmente não é grande coisa ao copiar o código, mas pensei em mencioná-lo de qualquer maneira. Demorei um pouco para descobrir isso (e pela segunda vez).