it-swarm-id.com

Apakah saya menambahkan Metabox Kategori ke lampiran?

Saya menggunakan register_taxonomy_for_object_type() untuk menambahkan bidang taksonomi Kategori ke unggahan Media (lampiran). Saya menggunakan kode ini untuk melakukannya:

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

Ini berfungsi dan menambahkan bidang teks sederhana untuk Kategori ke halaman Media saat melihat gambar. Yang benar-benar saya inginkan adalah membuatnya menampilkan Kategori Metabox yang sebenarnya sehingga saya bisa memilih Kategori yang ingin saya gunakan daripada hanya mengetiknya ke dalam bidang polos. Saya juga menemukan bahwa menempatkan siput untuk kategori ke dalam bidang teks ini seperti my-category-name akhirnya ditampilkan sebagai nama kategori aktual seperti My Category Name ketika disimpan, yang membuat bidang teks sederhana semakin sedikit pilihan yang berguna.

Saya telah melihat fungsi add_post_type_support() untuk menambahkan Metabox dan telah melihatnya digunakan untuk Jenis Posting Kustom, saya tidak bisa melihat apakah mungkin untuk menambahkan yang sama untuk lampiran.

18
Rick Curran

Edit: 12/09/2017 Lihat jawaban ini untuk solusi yang lebih mutakhir untuk ini: Bagaimana cara menggunakan taksonomi pada lampiran dengan Perpustakaan Media baru?

Saya akan menjawab pertanyaan saya sendiri di sini karena saya telah berhasil menemukan solusi untuk apa yang saya coba lakukan. Saya sampai pada kesimpulan bahwa Kategori Metabox tidak mungkin diaktifkan untuk lampiran. Namun, saya menemukan bahwa cukup mudah untuk mendapatkan bidang dasar untuk Kategori yang ditambahkan ke halaman lampiran dengan menggunakan register_taxonomy_for_object_type dan 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');
}

Bidang yang ditambahkan menunjukkan seperti ini:

alt text

Ini hanya bidang teks biasa tetapi yang saya temukan adalah Anda bisa mengetik nama kategori yang ada di sana dan kemudian akan berhasil disimpan ketika lampiran diperbarui (Satu-satunya perilaku aneh adalah bahwa ia merender kembali versi normal bukan siput setelah disimpan).

Setelah saya menyadari bahwa saya bisa menyimpan kategori dengan cara ini maka saya pikir saya bisa mendapatkan daftar semua kategori yang tersedia sebagai kotak centang dan memeriksa yang sudah dipilih. Saya kemudian menggunakan sedikit jQuery untuk mengambil nilai dari kategori yang diperiksa dan memasukkan siput semua kategori ke dalam bidang Kategori. Untuk membuat ini tampak lebih mulus, saya kemudian menggunakan sedikit CSS sederhana untuk menyembunyikan baris tabel yang berisi bidang Kategori, jadi yang Anda lihat hanyalah kotak centang, seperti:

alt text

Sekarang saya bisa menambahkan kategori ke lampiran gambar saya bisa menggunakan sesuatu seperti:

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

Dan tarik gambar yang dikategorikan ke dalam halaman! Tepat seperti yang kuharapkan, aku tidak berpikir akan ada cara untuk melakukannya, tetapi senang aku berhasil menemukan sesuatu.

Saya telah mengubahnya menjadi sebuah plugin bernama WOS Media Categories yang telah saya sediakan untuk diunduh dari situs web saya, Suburbia.org.uk , saya harap ini bisa bermanfaat bagi orang lain! Terima kasih sekali lagi kepada mereka yang mengomentari ini dan pertanyaan lain yang saya ajukan di sini yang membantu mengatasinya!

Pembaruan: Saya telah menambahkan perbaikan untuk memungkinkan kategori ditambahkan sementara gambar diunggah menggunakan pengunggah massal Flash.

13
Rick Curran

baru saja membuat ini, yang merupakan solusi lengkap untuk tautan javascript herky-jerk ke bidang formulir. Karena nilai kotak centang Anda diteruskan bersama dengan $ _POST saat kirim, Anda bisa mengambilnya selama filter add_image_attachment_fields_to_save dan mengatur ketentuan objek posting.

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

(perhatikan bahwa saya menggunakan taksonomi ubahsuaian, dan bukan kategori, jadi Anda harus mengubah array $ kategori agar sesuai dengan array yang sama seperti yang Anda gunakan saat mengatur kotak centang)

Shabam, shabozzle. Nikmati.

4
Drew Gourley

Saya telah membuat plugin menggunakan Kategori Media WOS @ RickCurran sebagai titik awal. Namun, Kategori Media WOS, seperti plugin lain yang menambahkan dukungan kategori ke media, tidak benar-benar menambahkan metabox, saya telah melakukan hal itu.

overall view

Ini tentu disederhanakan dari metabox pada posting dan halaman, tetapi saya memang menyertakan kemampuan penyaringan yang membuatnya mudah digunakan.

filterable categories

Saya sebenarnya menghasilkan seluruh kotak metabox yang Anda lihat di halaman dan posting, tetapi menyembunyikan bit yang tidak berfungsi pada halaman media karena kurangnya gaya dan javascript yang hilang.

Saya menyambut setiap pemikiran yang mungkin dimiliki seseorang tentang bagaimana membuat metabox berfungsi penuh - sesuatu yang ingin saya lakukan di versi selanjutnya.

1
eddiemoya

Ini sulit/rumit jika Anda ingin menggunakan kotak kategori default WordPress. Untuk satu hal, metabox tidak mengembalikan output, itu hanya menggemakannya. Selain itu, itu tidak akan memberi Anda nama bidang input yang benar, sehingga tidak akan menyimpan. Satu ide mungkin menggunakan jQuery UI Autocomplete untuk mereplikasi fungsi kotak tag.

Namun, jika Anda ingin bermain-main dengan bidang editor media, Anda dapat menghubungkan ke 'attachment_fields_to_edit' dan mengedit array bidang. Filter melewati dua argumen ke callback: argumen pertama adalah array bidang, kedua adalah objek posting lampiran. Lihat di sini untuk detail lebih lanjut:

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

1
John P Bloch

Plugin hebat Rick - sangat membantu.

Jika Anda memindahkan inclick trigger inline alih-alih mengikatnya ke onload (dan membuat beberapa tweak kecil lainnya), itu akan bekerja pada pengunggah massal Flash juga. Dengan versi saat ini, Flash dimuat setelah acara pemuatan jQuery sehingga objek belum ada.

js direvisi:

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

tambahkan onclick ke input dalam file php:

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

tambahkan id formulir pengunggah massal ke file css:

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

}

0
djbokka