Pregunta

Estoy utilizando register_taxonomy_for_object_type() para agregar el campo Categoría de la taxonomía a las subidas de Medios (archivos adjuntos). Estoy usando este código para hacerlo:

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

Este obras y añade un campo de texto simple para la categoría a la página de los medios de comunicación durante la visualización de una imagen. Lo que realmente quiero es hacer que aparezcan las categorías reales Metabox para que pueda elegir las categorías que quiero usar en lugar de escribirlas en el campo llano. También he encontrado que poner el proyectil para una categoría en este campo de texto como extremos my-category-name arriba que muestra como el nombre de la categoría real como My Category Name cuando se guarda, por lo que el campo de texto simple, incluso menos de una opción útil.

He estado buscando en la función add_post_type_support() para añadir Metaboxes y he visto que se usa para Personalización Pon Tipos, simplemente no puedo ver si es posible añadir el mismo para los archivos adjuntos.

¿Fue útil?

Solución

Editar: 09/12/2017 Ver esta respuesta para una solución más hasta la fecha a este: ¿Cómo utilizar las taxonomías en los archivos adjuntos con la nueva biblioteca de medios?

Me voy a responder a mi propia pregunta aquí como he logrado encontrar una solución a lo que he estado tratando de hacer. Llegué a la conclusión de que no era posible conseguir la Categoría Metabox habilitado para archivos adjuntos. Sin embargo, encontré que era bastante fácil conseguir un campo básicos en las categorías añadidas a la página de los anexos, utilizando register_taxonomy_for_object_type y 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');
}

El campo agregado mostró así:

text alt

Es sólo un campo de texto plano, pero lo que encontré fue que podría escribir el nombre de una categoría existente allí y entonces sería guardado correctamente cuando el accesorio ha sido actualizada (El comportamiento sólo extraño es que vuelve la espalda de la normal versión en lugar de la bala después de guardar).

Una vez que me di cuenta que podía salvar a las categorías de esta manera entonces me di cuenta que podía obtener una lista de todas las categorías disponibles como casillas de verificación y comprobar los que habían sido seleccionados. Luego utiliza un poco de jQuery para agarrar los valores de las categorías controladas y poner babosas todas las categorías en el campo Categoría. Para hacer que esto parezca aún más transparente que luego se usa un poco simple de CSS para ocultar la fila de la tabla que contiene el campo Categoría, por lo que todo lo que siempre ves son las casillas de verificación, así:

text alt

Ahora que puedo añadir categorías a las imágenes adjuntas puedo usar algo como:

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

Y tirar de las imágenes clasificadas en una página! Exactamente lo que esperaba hacer, no pensé que iba a ser una manera de hacerlo, pero lo contenta conseguido algo mejor.

Me he convertido esto en un plugin llamado WOS Media Categories que he puesto a disposición de descarga de mi página web, Suburbia.org.uk , espero que sea de utilidad para alguien más! Gracias de nuevo a los que comentaron sobre esta y otras cuestiones que he pedido aquí, que ayudaron a la figura hacia fuera!

Actualización:. Tengo una solución para permitir a las categorías que se añadirán al mismo tiempo imágenes se cargan mediante el cargador de fotografías de inflamación

Otros consejos

acaba de crear esto, que es una solución completa a la herky-jerk Javascript vinculación con el campo de formulario. Dado que se transmiten los valores de las casillas de verificación junto con el $ _POST en enviar, sólo les puede agarrar en el filtro de add_image_attachment_fields_to_save y establecer términos del objeto postal.

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);

(nota que estoy usando una taxonomía personalizada, y no categorías, por lo que tendrá que cambiar la matriz categorías $ para que coincida con la misma matriz como se utiliza al configurar sus casillas de verificación)

Shabam, shabozzle. Disfrutar.

Esto es difícil / complicado si desea utilizar cuadro de categoría por defecto de WordPress. Por un lado, la METABOX no devuelve la salida, sólo se hace eco de ella. Además de eso, no le daría el nombre del campo de entrada correcta, por lo que no se ahorraría. Una idea podría ser la de utilizar un jQuery UI autocompletar para replicar la funcionalidad de la caja de las etiquetas.

Sin embargo, si desea jugar con los campos del editor de medios, se puede enganchar en 'attachment_fields_to_edit' y editar el conjunto de campos. El filtro pasa dos argumentos para la devolución de llamada: primer argumento es el array de campos, segundo es el objeto poste de fijación. Vea aquí para más detalles:

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

He creado un plugin usando @ WOS Categorías medios de RickCurran como punto de partida. Sin embargo, Categorías WOS los medios de comunicación, al igual que otros plugins que añaden categoría de apoyo a los medios de comunicación, no logra realmente añadir un METABOX, he hecho exactamente eso.

visión de conjunto

Su forma simplificada necesariamente las Metaboxes en entradas y páginas, pero lo hice incluir una capacidad de filtración que hace que sea fácil de usar.

categorías filtrables

De hecho, estoy generando toda la categoría METABOX que se ve en las páginas y mensajes, pero ocultar los bits que no haga el trabajo en la página de los medios debido tanto a la falta de estilismo y la falta javascript.

Me bienvenida a cualquier pensamientos que nadie pueda tener en cuanto a cómo hacer que el METABOX completamente funcional - algo que pretendo hacer en una versión posterior

.

Gran plugin de Rick -. Muy útil

Si se mueve el gatillo onclick en línea en lugar de unirse a onLoad (y hacer algunos otros ajustes menores), que va a trabajar en el cargador de fotografías de Flash también. Con la versión actual de las cargas flash tras el evento de carga jQuery por lo que no existen los objetos todavía.

js revisadas:

 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);
}

añadir onclick a la entrada en el archivo PHP:

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

añadir mayor cargador form id al archivo CSS:

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

}

Licenciado bajo: CC-BY-SA con atribución
scroll top