it-swarm-ko.tech

첨부물에 범주 메타 박스를 추가 할 수 있습니까?

Media Uploads (첨부 파일)에 범주 택 소노 미 필드를 추가하려면 register_taxonomy_for_object_type()을 사용하고 있습니다. 이 코드를 사용하여 이렇게 :

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

이렇게하면 이미지를 볼 때 미디어 페이지에 범주에 대한 간단한 텍스트 필드가 추가되고 추가됩니다. 필자가 정말로 원하는 것은 일반 필드에 입력하기보다는 사용할 카테고리를 선택할 수 있도록 실제 Categories Metabox를 표시하는 것입니다. 나는 또한 my-category-name와 같은이 텍스트 필드에 범주에 대한 슬러그를 넣는 것이 저장 될 때 My Category Name와 같은 실제 범주 이름으로 표시되도록 끝나며 간단한 텍스트 필드를 유용한 옵션으로 만듭니다.

나는 Metabox를 추가하기위한 add_post_type_support() 함수를보고 있었고 사용자 정의 포스트 유형에 사용되는 것을 보았습니다. 첨부 파일에 동일한 것을 추가 할 수 있는지는 알 수 없습니다.

18
Rick Curran

편집 : 12/09/2017 이것에 대한 최신 해결책은이 답변을 참조하십시오 : 새 미디어 라이브러리가있는 첨부 파일에 분류법을 사용하는 방법

나는 내가 해왔 던 일에 대한 해결책을 찾아 낼 수 있었기 때문에 여기에 내 자신의 질문에 대답 할 것이다. 첨부 파일에 카테고리 메타 박스를 사용할 수 없다는 결론에 도달했습니다. 그러나 register_taxonomy_for_object_typeadd_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');
}

추가 된 필드는 다음과 같이 나타납니다.

alt text

그냥 일반 텍스트 필드지만, 거기에 기존 카테고리의 이름을 입력하면 첨부 파일이 업데이트 될 때 성공적으로 저장된다는 것이 발견되었습니다. (유일한 이상한 행동은 저장 후 슬러그).

일단 범주를이 방법으로 저장할 수 있다는 것을 알게되면 사용 가능한 모든 범주 목록을 확인란으로 가져 와서 선택한 항목을 확인할 수 있다고 생각했습니다. 그런 다음 jQuery를 사용하여 확인 된 범주의 값을 가져 와서 모든 범주의 slug를 범주 필드에 넣었습니다. 좀 더 매끄럽게 보이기 위해서 간단한 CSS 비트를 사용하여 Category 필드가 포함 된 테이블 행을 숨 겼으므로 다음과 같은 체크 상자가 표시됩니다.

alt text

이제 이미지 첨부 파일에 범주를 추가 할 수 있으므로 다음과 같이 사용할 수 있습니다.

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

분류 된 이미지를 페이지로 가져옵니다! 정확히 내가하고 싶은 일은, 내가 할 수있는 방법이 없을 것이라고 생각했지만, 뭔가를 알아낼 수있어서 기뻤습니다.

내 웹 사이트, Suburbia.org.uk 에서 다운로드 할 수있게 만든 WOS Media Categories라는 플러그인으로 바꿨습니다. _ 다른 사람에게 유용 할 수 있기를 바랍니다. 이것에 대해 논평 한 사람들과 내가 여기에서 물어 보았던 다른 질문들에 다시 한번 감사드립니다.

업데이트 : 플래시 대량 업로드 프로그램을 사용하여 이미지를 업로드하는 동안 카테고리를 추가 할 수 있도록 수정 사항을 추가했습니다.

13
Rick Curran

방금 만든 폼 필드에 herkey-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 배열을 변경하여 확인란을 설정할 때 사용하는 것과 동일한 배열로 일치시켜야합니다)

Shabam, shabozzle. 즐겨.

4
Drew Gourley

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

overall view

게시물과 페이지의 대사 증후군은 필연적으로 단순화되었지만 사용하기 쉬운 필터링 기능이 포함되었습니다.

filterable categories

나는 페이지와 포스트에서 볼 수있는 전체 카테고리 메타 옥시를 실제로 생성하고 있지만, 스타일링과 자바 스크립트가 부족하기 때문에 미디어 페이지에서 작동하지 않는 비트를 숨기고 있습니다.

메타 볼크가 어떻게 기능을 발휘할 수 있는지에 대한 생각은 누구나 환영합니다. 이후 버전에서 할 생각입니다.

1
eddiemoya

이것은 WordPress의 기본 카테고리 상자를 사용하려는 경우 어렵거나 복잡합니다. 한 가지 들어, metabox 출력을 반환하지 않습니다, 그냥 그것을 메아리. 그 위에는 올바른 입력 필드 이름이 주어지지 않으므로 저장되지 않습니다. 하나의 아이디어는 jQuery UI Autocomplete 를 사용하여 태그 상자의 기능을 복제하는 것입니다.

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

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

1
John P Bloch

그레이트 플러그인 Rick - 매우 도움이됩니다.

Onclick 트리거를 onload에 바인딩하는 대신 인라인으로 이동하면 (다른 몇 가지 사소한 수정이 가능함) 플래시 대량 업로드 프로그램에서도 작동합니다. 현재 버전에서는 플래시가 jQuery로드 이벤트 이후에로드되므로 객체가 아직 존재하지 않습니다.

개정 된 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"....

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

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

}

0
djbokka