나는 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
내 예제에서도 정의되지 않았 으므로 코드를 복사 할 때 아마도 큰 문제는 아니지만 어쨌든 언급 할 것이라고 생각했습니다. 이것을 알아내는 데 시간이 걸렸습니다 (그리고 두 번째로).