첨부 파일에 카테고리 메타 박스를 추가 할 수 있습니까?


18

register_taxonomy_for_object_type()카테고리 분류 필드를 미디어 업로드 (첨부 파일)에 추가하는 데 사용 하고 있습니다. 이 코드를 사용하여 그렇게하고 있습니다.

add_action('init', 'reg_tax');
function reg_tax() {
   register_taxonomy_for_object_type('category', 'attachment');
}

이렇게하면 이미지를 볼 때 범주에 대한 간단한 텍스트 필드가 미디어 페이지에 추가됩니다. 내가 정말로 원하는 것은 실제 카테고리 메타 박스를 표시하여 평범한 필드에 입력하기보다는 사용하려는 카테고리를 선택할 수 있도록하는 것입니다. 또한 저장 할 때 my-category-name와 같이 실제 카테고리 이름으로 표시되는 것과 같이 카테고리의 슬러그를이 텍스트 필드에 넣으면 My Category Name간단한 텍스트 필드가 유용한 옵션이 아닙니다.

add_post_type_support()Metabox를 추가 하는 기능을 살펴보고 Custom Post Types에 사용되는 것을 보았습니다. 첨부 파일에 동일한 기능을 추가 할 수 있는지 확인할 수 없습니다.


당신이 가장 좋은 대답을 따기 전에 하루 이틀 기다리면 내가 (그냥 클라이언트 마감있어 ... 당신에게 플러그인을 쓸 것이다 그리고 오늘 밤에 존재하는 워드 프레스 답변에 워드 프레스의 만남을 ...)
MikeSchinkel

@ Mike : 감사합니다.이 문제에 어떤 솔루션이 있는지 알고 싶습니다. 내가 겪고있는 것은 WordPress에 약 90 %가있는 것처럼 보입니다. 마지막 10 % 정도 남아 있습니다!
Rick Curran

나는 커스텀 포스트 메타 박스와 매우 비슷한 것을 해냈다. 즉, (기본) 카테고리 목록을 포함합니다 (즉, 가장 인기있는 모든 탭 없음). 'attachment_fields_to_edit'가 POST를 구현하는 방법에 따라 다릅니다. 어쨌든, 나는 오늘 밤 할 수 없습니다. 잠이 필요해.
MikeSchinkel

죄송합니다. 이미 답변을 하셨으므로 할 일 목록을 삭제하겠습니다.
MikeSchinkel 1

@ Mike : 도와 주셔서 감사합니다. 내 솔루션에 대한 의견을 듣고 싶습니다. 나는 그것이 작동하게하는 방법을 찾게되어 기쁘다. 실제 카테고리 메타 박스를 통해 첨부 파일에 카테고리를 추가하는 것이 좋았지 만 솔루션은 충분히 작동합니다.
Rick Curran

답변:


14

편집 : 12/09/2017 이에 대한 최신 솔루션은이 답변을 참조하십시오. . 새로운 미디어 라이브러리가있는 첨부 파일에 분류법을 사용하는 방법은 무엇입니까?

내가하려고했던 것에 대한 해결책을 알아 냈으므로 여기에서 내 자신의 질문에 대답 할 것입니다. Category Metabox를 첨부 파일에 사용할 수 없다는 결론에 도달했습니다. 그러나 register_taxonomy_for_object_typeand 를 사용하여 첨부 파일 페이지에 추가 된 카테고리의 기본 필드를 얻는 것이 쉽다는 것을 알았습니다.add_post_type_support .

add_action('admin_init', 'reg_tax');
function reg_tax() {
   register_taxonomy_for_object_type('category', 'attachment');
   add_post_type_support('attachment', 'category');
}

추가 된 필드는 다음과 같습니다.

대체 텍스트

그것은 단지 평범한 텍스트 필드이지만 내가 찾은 것은 거기에 기존 범주의 이름을 입력하고 첨부 파일이 업데이트 될 때 성공적으로 저장된다는 것입니다. 저장 후 슬러그).

이 방법으로 범주를 저장할 수 있다는 것을 알게되면 사용 가능한 모든 범주 목록을 확인란으로 가져 와서 선택한 범주를 확인할 수 있다고 생각했습니다. 그런 다음 약간의 jQuery를 사용하여 선택된 범주의 값을 가져 와서 모든 범주의 슬러그를 범주 필드에 넣었습니다. 이 작업을보다 매끄럽게 보이게하기 위해 간단한 CSS를 사용하여 Category 필드가 포함 된 테이블 행을 숨겼습니다. 따라서 확인란은 다음과 같습니다.

대체 텍스트

이제 이미지 첨부에 카테고리를 추가 할 수 있으므로 다음과 같은 것을 사용할 수 있습니다.

get_posts('post_type=attachment&category_name=timber-fixed-windows')

분류 된 이미지를 한 페이지로 가져옵니다! 정확히 내가하고 싶었던 일은 그것을 할 방법이있을 것이라고 생각하지 않았지만 무언가를 알아낼 수있어서 기뻤습니다.

나는 이것을 내 웹 사이트 Suburbia.org.ukWOS Media Categories 에서 다운로드 할 수 있는 플러그인으로 바 꾸었습니다. 다른 누군가에게 유용 할 수 있기를 바랍니다! 이것과 다른 질문에 대해 의견을 말한 사람들에게 다시 감사드립니다.

업데이트 : Flash 벌크 업 로더를 사용하여 이미지를 업로드하는 동안 카테고리를 추가 할 수있는 수정 사항을 추가했습니다.


데이터 무결성이 필요한 무언가에서 jQuery를 사용하면 약간 귀찮습니다. 나는 이것이 서버에서 모두 이루어질 수 있다고 확신합니다. 나는 그것을 곧 보려고 노력할 것이다.
MikeSchinkel

1
@ Mike : 네, 저도 약간 걱정입니다. 그러나 JavaScript가 관련된 많은 사례가 있으므로 해당 솔루션에 만족한다고 결정했습니다. 그래도 다른 방법에 대한 피드백을 얻을 수있어서 기쁩니다. 기회가 생길 때까지 기다렸다가 돌아 오는 것을 볼 수는 있지만 WordPress 저장소에 제출하고 싶습니다. 감사!
Rick Curran

@Mike 또는 @Rick-미디어를 추가 할 때 특정 카테고리에 게시물을 자동으로 할당 할 수있는 다른 예를 제공 할 수 있습니까? 카테고리 연결은 자신이 사용중인 게시물 유형을 기반으로하거나 코드를 통해 수동으로 설정됩니까?
NetConstructor.com

@ NetConstructor.com- 나에게 또 다른 질문처럼 들린다 ...
MikeSchinkel

@ netconstructor.com : 네, 또 다른 큰 질문처럼 들립니다!
Rick Curran

4

방금 이것을 만들었습니다. 양식 필드에 Herky-jerk Javascript 연결에 대한 완전한 해결 방법입니다. 체크 박스의 값은 제출시 $ _POST와 함께 전달되므로 add_image_attachment_fields_to_save 필터 중에 값을 가져 와서 포스트 오브젝트의 용어를 설정할 수 있습니다.

function register_custom_taxonomies() {
    $labels = array(
        'name' => _x( 'Image Formats', 'taxonomy general name' ),
        'singular_name' => _x( 'Image Format', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Formats' ),
        'all_items' => __( 'All Formats' ),
        'parent_item' => __( 'Parent Format' ),
        'parent_item_colon' => __( 'Parent Format:' ),
        'edit_item' => __( 'Edit Format' ), 
        'update_item' => __( 'Update Format' ),
        'add_new_item' => __( 'Add New Format' ),
        'new_item_name' => __( 'New Format Name' ),
        'menu_name' => __( 'Image Format' )
    );
    $capabilities = array(
        'manage_terms' => 'nobody',
        'edit_terms' => 'nobody',
        'delete_terms' => 'nobody'
    );
    $args = array(
        'public' => false,
        'hierarchical' => true,
        'labels' => $labels,
        'capabilities' => $capabilities,
        'show_ui' => false,
        'query_var' => 'image-format',
        'rewrite' => false
    );
    register_taxonomy('image-format', array('attachment'), $args);
}
add_action( 'init', 'register_custom_taxonomies', 1);

function add_media_categories($fields, $post) {
    $categories = get_categories(array('taxonomy' => 'image-format', 'hide_empty' => 0));
    $post_categories = wp_get_object_terms($post->ID, 'image-format', array('fields' => 'ids'));
    $all_cats .= '<ul id="media-categories-list" style="width:500px;">'; 
    foreach ($categories as $category) {
        if (in_array($category->term_id, $post_categories)) {
            $checked = ' checked="checked"';
        } else {
            $checked = '';  
        }
        $option = '<li style="width:240px;float:left;"><input type="checkbox" value="'.$category->category_nicename.'" id="'.$post->ID.'-'.$category->category_nicename.'" name="'.$post->ID.'-'.$category->category_nicename.'"'.$checked.'> ';
        $option .= '<label for="'.$post->ID.'-'.$category->category_nicename.'">'.$category->cat_name.'</label>';
        $option .= '</li>';
        $all_cats .= $option;
    }
    $all_cats .= '</ul>';

    $categories = array('all_categories' => array (
            'label' => __('Image Formats'),
            'input' => 'html',
            'html' => $all_cats
    ));
    return array_merge($fields, $categories);
}
add_filter('attachment_fields_to_edit', 'add_media_categories', null, 2);

function add_image_attachment_fields_to_save($post, $attachment) {
    $categories = get_categories(array('taxonomy' => 'image-format', 'hide_empty' => 0));
    $terms = array();
    foreach($categories as $category) {
        if (isset($_POST[$post['ID'].'-'.$category->category_nicename])) {
            $terms[] = $_POST[$post['ID'].'-'.$category->category_nicename];        
        }
    }
    wp_set_object_terms( $post['ID'], $terms, 'image-format' );
    return $post;
}
add_filter('attachment_fields_to_save', 'add_image_attachment_fields_to_save', null , 2);

(카테고리가 아닌 맞춤 분류 체계를 사용하고 있으므로 확인란을 설정할 때 사용한 것과 동일한 배열과 일치하도록 $ categories 배열을 변경해야합니다)

샤밥, 샤 보즐. 즐겨.


add_image_attachment_fields_to_save 함수는 마지막에 $ post를 반환해야합니다. wp_set_object_terms( $post['ID'], $terms, 'image-format' ); return $post;. 그리고 게시 한 스크립트는 register_custom_taxonomies를 실행하지 않습니다. 그러나 어쨌든 좋은 스크립트. 앞으로 이것을 확실히 사용할 것입니다!
Rob Vermeer

오, 죄송합니다. 편리하다고 생각했습니다. 여기서 수정하겠습니다. 반품에 대한 좋은 지적은 있지만 아무런 문제가 없었습니다.
Drew Gourley

1

WordPress의 기본 범주 상자를 사용하려는 경우 어렵거나 복잡합니다. 한 가지로, 메타 박스는 출력을 반환하지 않고 그냥 출력합니다. 또한 올바른 입력 필드 이름을 제공하지 않으므로 저장되지 않습니다. 한 가지 아이디어는 jQuery UI 자동 완성 을 사용하는 것입니다. 하여 태그 상자의 기능을 복제하는 .

그러나 미디어 편집기의 필드를 가지고 놀고 싶다면 'attachment_fields_to_edit' 배열에 편집 있습니다. 필터는 콜백에 두 개의 인수를 전달합니다. 첫 번째 인수는 필드의 배열이고 두 번째 인수는 부착 포스트 객체입니다. 자세한 내용은 여기를 참조하십시오.

http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-admin/includes/media.php.source.html#l1025


고마워, 나는 그것을 attachment_fields_to_edit보고 어떻게 진행되는지 볼 것이다 .
Rick Curran

1

@RickCurran의 WOS 미디어 카테고리를 시작점으로 사용하여 플러그인을 만들었습니다. 그러나 미디어에 카테고리 지원을 추가하는 다른 플러그인과 마찬가지로 WOS 미디어 카테고리는 실제로 메타 박스를 추가하지 않습니다.

전체보기

게시물과 페이지의 메타 박스를 단순화 시켰지만 사용하기 쉬운 필터링 기능이 포함되었습니다.

필터링 가능한 카테고리

실제로 페이지와 게시물에 표시되는 전체 범주 메타 박스를 생성하고 있지만 스타일링 부족과 누락 된 자바 스크립트로 인해 미디어 페이지에서 작동하지 않는 비트를 숨 깁니다.

메타 박스를 완벽하게 작동시키는 방법에 대한 모든 사람들의 생각을 환영합니다. 나중 버전에서하려고합니다.


0

훌륭한 플러그인 Rick-매우 유용합니다.

onclick 트리거를 onload에 바인딩하는 대신 인라인으로 이동하고 약간의 미세 조정을 수행하면 Flash 일괄 업 로더에서도 작동합니다. 현재 버전에서는 jQuery로드 이벤트 후에 Flash가로드되므로 객체가 아직 존재하지 않습니다.

수정 된 JS :

 function wos_category_click(cat){
    var container = jQuery(cat).closest("tbody");
    var cat_checked = jQuery(container).find("tr.all_categories input:checked");
    var cat_arr = jQuery(cat_checked).map(function() {
        return jQuery(this).val();
    }).get().join();
    jQuery(container).find("tr.category > td.field > input.text").val(cat_arr);
}

PHP 파일에 입력하려면 onclick을 추가하십시오.

<input type="checkbox" onclick="wos_category_click(this)" class="wos-categories-cb"....

CSS 파일에 일괄 업 로더 양식 ID를 추가하십시오.

form#media-single-form tr.category,form#file-form tr.category {
display:none; 

}


고마워 djbokka! 코드베이스에이 수정 프로그램을 추가했습니다. 웹 사이트 suburbia.org.uk/page/projects.html#wos_media_categories
Rick Curran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.