私はdavid-bindaに同意します -素晴らしい質問です!私はこの問題に何度も遭遇し、かなりうまくいく解決策を考え出しました。pavlos-bizimisによって提案されているように、クラスを含む画像を挿入するショートコードを追加するアイデアは好きですが、画像編集ポップアップにオプションを追加するほどエレガントには問題を解決できないと思います(たとえば、おそらく画像IDを手動で入力する必要がない限り、画像をショートコードで囲みます)。また、一部のクライアントでは、ショートコードでさえ複雑すぎます(その場合、コースをオフにしてTinyMCEボタンにバインドできます)。
とにかく、さらなる騒ぎなしで-これが私の5セントです。このソリューションをスライドショープラグインで使用します。これにより、スライドショーから画像を含める/除外するオプションが提供され、一部の画像メタフィールドのコンテンツを表示するオーバーレイの背景色を設定できます。基本的にはにフック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
私の例ではも定義されていないので、コードをコピーする場合、これはおそらく大したことではありませんが、とにかくそれについて言及したいと思いました。これを理解するのに少し時間がかかりました(2回目はそのときです)。