Я могу добавить Метаполе Категории к вложению?

Я использую register_taxonomy_for_object_type() добавить поле таксономии Категории к Медиа загружает (вложения). Я использую этот код, чтобы сделать так:

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

Это работает и добавляет простое текстовое поле для Категории к странице Media при просмотре изображения. То, что я действительно хочу, должно заставить его отобразить фактическое Метаполе Категорий так, чтобы я мог выбрать Categories, я хочу использовать, а не просто ввести их в простое поле. Я также нашел что, поместив краткий заголовок для категории в это текстовое поле такой как my-category-name заканчивает тем, что отобразился как фактическое название категории как My Category Name когда это сохраняется, который делает простое текстовое поле еще меньшим количеством полезной опции.

Я смотрел на add_post_type_support() функция для добавления Метаполей и видела, что это использовало для Пользовательских Типов Сообщения, я просто не вижу, возможно ли добавить то же для вложений.

18
18.08.2010, 19:19
5 ответов

Править: 09.12.2017 Видят этот ответ для более актуального решения этого: Как использовать taxonomies на вложениях с новой Библиотекой мультимедиа?

Я собираюсь ответить на свой собственный вопрос здесь, поскольку мне удалось выяснить решение того, что я пытался сделать. Я пришел к выводу, что не было возможно включить Метаполе Категории для вложений. Однако я нашел, что было достаточно легко получить основное поле для Категорий, добавленных к странице вложений при помощи register_taxonomy_for_object_type и 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');
}

Добавленное поле показало как это:

alt text

Это - просто поле простого текста, но что я нашел, был то, что Вы могли ввести имя существующей категории там, и это будет затем успешно сохранено, когда вложение было обновлено (Единственное нечетное поведение состоит в том, что это представило назад нормальную версию вместо краткого заголовка после сохранения).

После того как я понял, что мог сохранить категории этот путь затем, я полагал, что мог получить список всех доступных категорий как флажки и проверить тех, которые были выбраны. Я затем использовал немного jQuery, чтобы захватить значения проверенных категорий и поместить краткие заголовки всех категорий в поле Category. Чтобы заставить это казаться еще более бесшовным, я затем использовал простой бит CSS для сокрытия строки таблицы, которая содержала поле Category, таким образом, все, что Вы когда-либо видите, является флажками, как так:

alt text

Теперь, когда я могу добавить категории для обработки изображений вложений, я могу использовать что-то как:

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

И вытяните категоризированные изображения в страницу! Точно, что я надеялся сделать, я не думал, там был способом сделать это, но довольный, что мне удалось понять что-то.

Я превратил это в названный плагин WOS Media Categories который я сделал доступными для загрузки с моего веб-сайта, Suburbia.org.uk, я надеюсь, что он может быть полезен для кого-то еще! Еще раз спасибо тем, кто прокомментировал это и другие вопросы, которые я задал здесь, который помог понять это!

Обновление: я добавил фиксацию, чтобы позволить категориям быть добавленными, пока изображения загружаются с помощью загрузчика объема Flash.

14
19.02.2020, 21:57
  • 1
    , я немного побеспокоен при помощи jQuery от чего-то, что требует целостности данных. Я вполне уверен, это может все быть сделано на сервере. Я попытаюсь посмотреть на него скоро. –  MikeSchinkel 22.08.2010, 11:31
  • 2
    @Mike: Да, я немного обеспокоен этим также. Однако существует много экземпляров, где JavaScript включен так, я решил, что был достаточно доволен тем решением. Определенно счастливый получить некоторую обратную связь на альтернативных методах все же. Когда я получаю шанс, я хотел бы отправить это в репозиторий WordPress, хотя я могу ожидать и видеть то, с чем Вы возвращаетесь.Спасибо! –  Rick Curran 23.08.2010, 17:26
  • 3
    @Mike или @Rick - Вы могли возможно обеспечить другой пример, который мог бы автоматически присвоить сообщение определенной категории, когда медиа добавляются? Ассоциация категории базировалась бы от типа сообщения, он идет или набор вручную через код? –  NetConstructor.com 19.10.2010, 15:38
  • 4
    @NetConstructor.com - Походит на другой вопрос мне... –  MikeSchinkel 20.10.2010, 10:22
  • 5
    @netconstructor.com: Да, походит на другой большой вопрос мне! –  Rick Curran 27.10.2010, 17:32

Это трудно/сложно, если Вы хотите использовать поле категории WordPress по умолчанию. С одной стороны, метаполе не возвращает вывод, оно просто повторяет его. Вдобавок ко всему, это не дало бы Вам корректное имя поля ввода, таким образом, это не сохранит. Одна идея могла бы состоять в том, чтобы использовать Автоматическое заполнение UI jQuery для тиражирования функциональности поля тегов.

Однако, если Вы хотите играть вокруг с полями редактора медиа, можно сцепиться в 'attachment_fields_to_edit' и отредактируйте массив полей. Фильтр передает два аргумента обратному вызову: первым аргументом является массив полей, второй объект сообщения вложения. Посмотрите здесь для получения дополнительной информации:

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

1
19.02.2020, 21:57
  • 1
    Спасибо, я буду смотреть на attachment_fields_to_edit и посмотрите, как это идет. –  Rick Curran 19.08.2010, 11:37

Большой плагин Rick - очень полезный.

Если Вы переместите триггер onclick, встроенный вместо того, чтобы связать его с onload (и сделаете несколько других незначительных тонких настроек), то это будет работать над загрузчиком объема Flash также. С текущей версией загрузки Flash после события загрузки 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);
}

добавьте onclick для ввода в php файле:

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

добавьте объемный идентификатор формы загрузчика к файлу CSS:

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

}

0
19.02.2020, 21:57

просто созданный это, которое является полным обходным решением herky-толчку связь 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
19.02.2020, 21:57

Я создал плагин с помощью Категорий WOS Media @RickCurran в качестве начальной точки. Однако Категории WOS Media, как другие плагины, которые добавляют поддержку категории медиа, на самом деле не добавляют метаполе, я сделал просто это.

overall view

Его обязательно упрощенная форма метаполя на сообщениях и страницах, но я действительно включал способность к фильтрации, которая помогает использовать.

filterable categories

Я на самом деле генерирую все метаполе категории, которое Вы видите на страницах и сообщениях, но сокрытие битов, которые не работают на странице медиа и из-за отсутствия моделирования и из-за недостающего JavaScript.

Я приветствую любые мысли, которые любой мог бы иметь относительно того, как сделать метаполе полностью функциональным - что-то, что я намереваюсь сделать в более поздней версии.

1
19.02.2020, 21:57

Теги

Похожие вопросы