Domanda

Sto usando register_taxonomy_for_object_type() per aggiungere il campo Categoria tassonomia di arrivi Media (allegati). Sto usando questo codice per farlo:

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

Questa opere e aggiunge un campo di testo semplice per la categoria alla pagina di supporto durante la visualizzazione di un'immagine. Quello che voglio veramente è quello di rendere pubbliche le attuali categorie Metabox modo che io possa scegliere le categorie che voglio usare, piuttosto che semplicemente digitare nel campo di pianura. Ho anche scoperto che mettere la lumaca per una categoria in questo campo di testo, come le estremità my-category-name up che visualizza il nome della categoria attuale come My Category Name quando è salvato, il che rende il campo di testo semplice, anche meno di un'opzione utile.

Sono stato a guardare la funzione add_post_type_support() per l'aggiunta Metabox e l'ho visto usato per Tipi personalizzati Post, non riesco proprio a vedere se è possibile aggiungere lo stesso per gli allegati.

È stato utile?

Soluzione

Modifica: 2017/12/09 Vedere questa risposta per una più aggiornata soluzione a questo: Come utilizzare tassonomie sugli allegati con la nuova libreria multimediale?

ho intenzione di rispondere alla mia domanda qui come sono riuscito a trovare una soluzione a quello che ho cercato di fare. Sono giunto alla conclusione che non è stato possibile ottenere Categoria Metabox abilitata per gli allegati. Tuttavia, ho trovato che era abbastanza facile da ottenere un campo base per le categorie aggiunti alla pagina allegati utilizzando register_taxonomy_for_object_type e 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');
}

Il campo aggiunto ha mostrato come questo:

alt text

E 'solo un campo di testo semplice ma quello che ho trovato è che è possibile digitare il nome di una categoria esistente in là e sarebbe quindi essere salvato con successo quando l'attacco è stato aggiornato (Il comportamento solo strano è che rendeva di nuovo al normale versione invece della lumaca dopo il salvataggio).

Una volta mi sono reso conto che avrei potuto salvare le categorie in questo modo, allora ho pensato che avrei potuto ottenere un elenco di tutte le categorie disponibili come caselle di controllo e verificare quelli che erano stati selezionati. Ho quindi utilizzato un po 'di jQuery per afferrare i valori di categorie controllato e messo lumache tutte le categorie nel campo Categoria. Per rendere questo sembra ancora più senza soluzione di continuità Ho quindi utilizzato un semplice po 'di CSS per nascondere la riga della tabella che contiene il campo Categoria, quindi tutto quello che mai visto sono le caselle di controllo, in questo modo:

alt text

Ora che posso aggiungere categorie per gli allegati di immagine posso usare qualcosa come:

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

E tirare le immagini suddivise in una pagina! Esattamente quello che speravo di fare, non pensavo che ci sarebbe stato un modo per farlo, ma sono contento riuscito a capire qualcosa.

Ho trasformato questo in un plugin chiamato WOS Media Categories che ho messo a disposizione per il download da il mio sito web, Suburbia.org.uk , spero che possa essere utile a qualcun altro! Grazie ancora a coloro che hanno commentato questa e altre domande che ho chiesto qui che ha aiutato la figura fuori!

Aggiornamento:. Ho una correzione per consentire categorie da aggiungere, mentre le immagini vengono caricati utilizzando l'uploader di massa Flash

Altri suggerimenti

appena creato questo, che è una soluzione completa al herky jerk JavaScript linkage al campo di modulo. Dal momento che i valori delle caselle vengono passati insieme con il $ _POST su presentare, si può semplicemente prendere durante il filtro add_image_attachment_fields_to_save e impostare i termini dell'oggetto postale.

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

(si noti che sto usando una tassonomia personalizzato, e non le categorie, quindi dovrete cambiare l'array $ categorie per abbinare lo stesso array come si usa quando si impostano le caselle di controllo)

Shabam, shabozzle. Godetevi.

Questo è difficile / complicato se si desidera utilizzare scatola categoria di default WordPress'. Per prima cosa, il METABOX non restituisce l'output, semplicemente fa eco esso. In cima a quello, non vuoi dare il nome del campo di ingresso corretta, in modo che non avrebbe salvato. Un'idea potrebbe essere quella di utilizzare un jQuery UI Autocomplete di replicare la funzionalità della casella di tag.

Tuttavia, se si vuole giocare con i campi del redattore multimediale, è possibile collegare in 'attachment_fields_to_edit' e modificare l'array di campi. Il filtro passa due argomenti al callback: primo parametro è l'array di campi, secondo è l'oggetto allegato palo. Vedi qui per maggiori dettagli:

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

Ho creato un plugin usando @ di RickCurran WOS Media Categorie come punto di partenza. Tuttavia, WOS Media Categorie, come altri plugin che aggiungono categoria sostegno ai mezzi di comunicazione, pretende molto in realtà aggiungere un METABOX, ho fatto proprio questo.

visione d'insieme

La sua forma semplificata necessariamente le Metabox sui post e le pagine, ma ho fatto includere una capacità di filtraggio che lo rende facile da usare.

categorie filtrabili

Sono in realtà la generazione della intera categoria METABOX che si vede sulle pagine e post, ma nasconde i bit che il lavoro Dont nella pagina dei media a causa sia una mancanza di stile e javascript mancante.

I favorevole a qualsiasi pensieri chiunque potrebbe avere su come rendere il METABOX pienamente funzionale - cosa ho intenzione di fare in una versione successiva

.

ottimo plugin Rick -. Molto utile

Se si sposta il grilletto onclick in linea invece di legarsi a onload (e fare un paio di altre modifiche minori), che funzionerà sulla maggior parte uploader flash così. Con la versione corrente in modo non esistono ancora i carichi Flash dopo l'evento carico jQuery gli oggetti.

js rivisti:

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

aggiungi onclick per inserire nel file php:

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

massa aggiuntivo uploader form id al file CSS:

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

}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top