Làm cách nào để sử dụng phân loại trên tệp đính kèm với Thư viện phương tiện mới?


9

WordPress 3.5 đã thay đổi quản lý phương tiện và bây giờ màn hình chỉnh sửa Thư viện phương tiện sử dụng giao diện người dùng loại bài đăng mặc định. Phân loại rất hữu ích cho các cài đặt WP với người dùng và tệp đính kèm khác nhau, mang lại nhiều khả năng hơn để tìm tệp đính kèm và / hoặc thêm phân loại.

Tôi đã thấy Tôi có thể thêm Danh mục Metabox vào tệp đính kèm không? trên WPSE, nhưng không hoàn hảo để sử dụng với WP 3.5 và cũng không có thông tin về việc sử dụng các danh mục tùy chỉnh trên tệp đính kèm, không chỉ các danh mục bài đăng.

Tóm lại: có thể thêm danh mục / thẻ tùy chỉnh vào tệp đính kèm để sử dụng trong Thư viện phương tiện với WP 3.5 không?

Câu trả lời:


15

Để thêm các đơn vị phân loại từ bài đăng loại bài đăng, mặc định, sau đó thật dễ dàng để thêm các danh mục phân loại 'và' thẻ 'với một plugin nhỏ nằm ở nguồn bên dưới.

<?php
/**
 * Plugin Name: Attachment Taxonomies
 * Plugin URI:  
 * Text Domain: attachment_taxonomies
 * Domain Path: /languages
 * Description: 
 * Version:     1.0.0
 * Author:      Frank Bültge
 * Author URI:  http://bueltge.de
 * License:     GPLv3
 */


add_action( 'init', 'fb_attachment_taxonomies' );
function fb_attachment_taxonomies() {

    $taxonomies = array( 'category', 'post_tag' ); // add the 2 tax to ...
    foreach ( $taxonomies as $tax ) {
        register_taxonomy_for_object_type( $tax, 'attachment' ); // add to post type attachment
    }
}

Để sử dụng phân loại tùy chỉnh trên tệp đính kèm, điều quan trọng là bạn phải tạo một phân loại tùy chỉnh và loại này cho loại bài đăng attachment, như plugin theo dõi.

<?php
/**
 * Plugin Name: Attachment Taxonomies
 * Plugin URI:  
 * Text Domain: attachment_taxonomies
 * Domain Path: /languages
 * Description: 
 * Version:     1.0.0
 * Author:      Frank Bültge
 * Author URI:  http://bueltge.de
 * License:     GPLv3
 */

if ( function_exists( 'add_filter' ) )
    add_action( 'plugins_loaded', array( 'Fb_Attachment_Taxonomies', 'get_object' ) );
/**
 * Add Tags and Categories taxonmies to Attachment with WP 3.5
 */
class Fb_Attachment_Taxonomies {

    static private $classobj;

    /**
     * Constructor, init the functions inside WP
     *
     * @since   1.0.0
     * @return  void
     */
    public function __construct() {

        // load translation files
        add_action( 'admin_init', array( $this, 'localize_plugin' ) );
        // add taxonmies
        add_action( 'init', array( $this, 'setup_taxonomies' ) );
    }

    /**
     * Handler for the action 'init'. Instantiates this class.
     *
     * @since   1.0.0
     * @access  public
     * @return  $classobj
     */
    public function get_object() {

        if ( NULL === self::$classobj ) {
            self::$classobj = new self;
        }

        return self::$classobj;
    }

    /**
     * Localize plugin function.
     *
     * @uses    load_plugin_textdomain, plugin_basename
     * @since   2.0.0
     * @return  void
     */
    public function localize_plugin() {

        load_plugin_textdomain(
            'attachment_taxonomies',
            FALSE,
            dirname( plugin_basename( __FILE__ ) ) . '/languages/'
        );
    }

    /**
     * Setup Taxonomies
     * Creates 'attachment_tag' and 'attachment_category' taxonomies.
     * Enhance via filter `fb_attachment_taxonomies`
     * 
     * @uses    register_taxonomy, apply_filters
     * @since   1.0.0
     * @return  void
     */
    public function setup_taxonomies() {

        $attachment_taxonomies = array();

        // Tags
        $labels = array(
            'name'              => _x( 'Media Tags', 'taxonomy general name', 'attachment_taxonomies' ),
            'singular_name'     => _x( 'Media Tag', 'taxonomy singular name', 'attachment_taxonomies' ),
            'search_items'      => __( 'Search Media Tags', 'attachment_taxonomies' ),
            'all_items'         => __( 'All Media Tags', 'attachment_taxonomies' ),
            'parent_item'       => __( 'Parent Media Tag', 'attachment_taxonomies' ),
            'parent_item_colon' => __( 'Parent Media Tag:', 'attachment_taxonomies' ),
            'edit_item'         => __( 'Edit Media Tag', 'attachment_taxonomies' ), 
            'update_item'       => __( 'Update Media Tag', 'attachment_taxonomies' ),
            'add_new_item'      => __( 'Add New Media Tag', 'attachment_taxonomies' ),
            'new_item_name'     => __( 'New Media Tag Name', 'attachment_taxonomies' ),
            'menu_name'         => __( 'Media Tags', 'attachment_taxonomies' ),
        );

        $args = array(
            'hierarchical' => FALSE,
            'labels'       => $labels,
            'show_ui'      => TRUE,
            'show_admin_column' => TRUE,
            'query_var'    => TRUE,
            'rewrite'      => TRUE,
        );

        $attachment_taxonomies[] = array(
            'taxonomy'  => 'attachment_tag',
            'post_type' => 'attachment',
            'args'      => $args
        );

        // Categories
        $labels = array(
            'name'              => _x( 'Media Categories', 'taxonomy general name', 'attachment_taxonomies' ),
            'singular_name'     => _x( 'Media Category', 'taxonomy singular name', 'attachment_taxonomies' ),
            'search_items'      => __( 'Search Media Categories', 'attachment_taxonomies' ),
            'all_items'         => __( 'All Media Categories', 'attachment_taxonomies' ),
            'parent_item'       => __( 'Parent Media Category', 'attachment_taxonomies' ),
            'parent_item_colon' => __( 'Parent Media Category:', 'attachment_taxonomies' ),
            'edit_item'         => __( 'Edit Media Category', 'attachment_taxonomies' ), 
            'update_item'       => __( 'Update Media Category', 'attachment_taxonomies' ),
            'add_new_item'      => __( 'Add New Media Category', 'attachment_taxonomies' ),
            'new_item_name'     => __( 'New Media Category Name', 'attachment_taxonomies' ),
            'menu_name'         => __( 'Media Categories', 'attachment_taxonomies' ),
        );

        $args = array(
            'hierarchical' => TRUE,
            'labels'       => $labels,
            'show_ui'      => TRUE,
            'query_var'    => TRUE,
            'rewrite'      => TRUE,
        );

        $attachment_taxonomies[] = array(
            'taxonomy'  => 'attachment_category',
            'post_type' => 'attachment',
            'args'      => $args
        );

        $attachment_taxonomies = apply_filters( 'fb_attachment_taxonomies', $attachment_taxonomies );

        foreach ( $attachment_taxonomies as $attachment_taxonomy ) {
            register_taxonomy(
                $attachment_taxonomy['taxonomy'],
                $attachment_taxonomy['post_type'],
                $attachment_taxonomy['args']
            );
        }

    }

} // end class

Xem kết quả trên ảnh chụp màn hình theo dõi, cũng là sự khác biệt - dễ dàng hơn khi các từ nhỏ của tôi đến nguồn. Nhưng hình ảnh của người tôi trong ảnh chụp màn hình ví dụ không liên quan đến nguồn;) Ảnh chụp màn hình của phương tiện chỉnh sửa trong loại bài đăng mặc định ui với WP 3.5

Gợi ý nhỏ: giao diện người dùng từ hộp phương thức để thêm phương tiện vào loại bài đăng rất ít khác với màn hình chỉnh sửa trên tệp đính kèm loại bài đăng. Các đơn vị phân loại phân cấp chỉ có một cây trong màn hình chỉnh sửa. Trong hộp phương thức là trường đầu vào và thuế hoạt động với dấu phẩy là dấu tách. Xem thêm bài đăng này từ Helen trên blog WP Core. Nhưng hãy xem các nguyên tắc phân loại tùy chỉnh cho 'thẻ' và 'loại' trong ảnh chụp màn hình.

Chỉnh sửa tệp đính kèm trong hộp phương thức


1
+1+ Thêm một bước nữa trong việc khám phá Thư viện truyền thông 3.5, một ẩn số lớn của năm 2012!
brasofilo

2
Một bổ sung tốt đẹp sẽ là đối số 'show_admin_column' => true.
brasofilo

Có bạn có quyền. Tôi thích tham số này trong WP 3.6; Tôi sử dụng nó thường xuyên với một lớp người trợ giúp nhỏ, nếu tôi sử dụng các đơn vị phân loại mayn: github.com/bueltge/WP-Control-Taxonomy
bueltge

2
Frank, đừng quên rằng đối với các nguyên tắc phân loại đính kèm, có lẽ bạn nên đặt update_count_callbackthành _update_generic_term_count. Xem mục Codex được cập nhật để biết lý do tại sao: codex.wordpress.org/Function_Reference/,
Tom Auger

2

Tôi sẽ mở rộng Câu trả lời của Frank bằng cách thêm Bộ lọc phân loại vào Danh sách quản trị cho Loại bài đăng tùy chỉnh?

Tìm kiếm cả hai thứ, Danh mục truyền thông và Bộ lọc phân loại, tôi đã hợp nhất mã của Frank với câu trả lời của Kaiser trong bài đăng đó. Đồng thời thêm một liên lạc bổ sung của tôi để thêm loại bài đăng, nơi tệp đính kèm được tải lên, dưới dạng Danh mục.

Nó tạo ra điều này:

lọc các loại phương tiện truyền thông

add_action(
    'plugins_loaded',
    array ( WPSE76720_Attachment_Taxonomies::get_object(), 'plugin_setup' )
);

// BUELTGE/KAISER/RUDOLF
class WPSE76720_Attachment_Taxonomies 
{
    protected static $instance = NULL;
    public $post_type;
    public $taxonomies;

    /**
     * Used for regular plugin work.
     *
     * @wp-hook plugins_loaded
     * @return  void
     */
    public function plugin_setup()
    {
        // Taxonomies filter
        add_action( 'load-upload.php', array( $this, 'setup' ) );
        // add taxonmies
        add_action( 'init', array( $this, 'setup_taxonomies' ) );
        add_action( 'add_attachment', array( $this, 'auto_tax' ), 10, 2 );
    }

    /**
     * Constructor, init the functions inside WP
     *
     * @since   1.0.0
     * @return  void
     */
    public function __construct() {}

    /**
     * Handler for the action 'init'. Instantiates this class.
     *
     * @since   1.0.0
     * @access  public
     * @return  $instance
     */
    public function get_object() 
    {
        NULL === self::$instance and self::$instance = new self;
        return self::$instance;
    }

    /**
     * Setup Taxonomies
     * Creates 'attachment_tag' and 'attachment_category' taxonomies.
     * Enhance via filter `fb_attachment_taxonomies`
     * 
     * @uses    register_taxonomy, apply_filters
     * @since   1.0.0
     * @return  void
     */
    public function setup_taxonomies() 
    {
        $attachment_taxonomies = array();
        // Categories
        $labels = array(
            'name'              => __( 'Media Categories', 'b5f-mc' ),
            'singular_name'     => __( 'Media Category', 'b5f-mc' ),
            'search_items'      => __( 'Search Media Categories', 'b5f-mc' ),
            'all_items'         => __( 'All Media Categories', 'b5f-mc' ),
            'parent_item'       => __( 'Parent Media Category', 'b5f-mc' ),
            'parent_item_colon' => __( 'Parent Media Category:', 'b5f-mc' ),
            'edit_item'         => __( 'Edit Media Category', 'b5f-mc' ), 
            'update_item'       => __( 'Update Media Category', 'b5f-mc' ),
            'add_new_item'      => __( 'Add New Media Category', 'b5f-mc' ),
            'new_item_name'     => __( 'New Media Category Name', 'b5f-mc' ),
            'menu_name'         => __( 'Media Categories', 'b5f-mc' ),
        );
        $args = array(
            'hierarchical' => TRUE,
            'labels'       => $labels,
            'show_admin_column' => TRUE,
            'show_ui'      => TRUE,
            'query_var'    => TRUE,
            'rewrite'      => TRUE,
        );
        $attachment_taxonomies[] = array(
            'taxonomy'  => 'attachment_category',
            'post_type' => 'attachment',
            'args'      => $args
        );
        $attachment_taxonomies = apply_filters( 'fb_attachment_taxonomies', $attachment_taxonomies );
        foreach ( $attachment_taxonomies as $attachment_taxonomy ) {
            register_taxonomy(
                $attachment_taxonomy['taxonomy'],
                $attachment_taxonomy['post_type'],
                $attachment_taxonomy['args']
            );
        }
    }

    public function setup()
    {
        add_action( current_filter(), array( $this, 'setup_vars' ), 20 );
        add_action( 'restrict_manage_posts', array( $this, 'get_select' ) );
        add_filter( "manage_taxonomies_for_attachment_columns", array( $this, 'add_columns' ) );
    }

    public function setup_vars()
    {
        $this->post_type = 'attachment';
        $this->taxonomies = get_object_taxonomies( $this->post_type );
    }

    public function add_columns( $taxonomies )
    {
        return array_merge(
             $taxonomies
            ,$this->taxonomies
        );
    }

    public function get_select()
    {
        $walker = new WCMF_walker;
        foreach ( $this->taxonomies as $tax )
        {
            wp_dropdown_categories( array(
                 'taxonomy'        => $tax
                ,'hide_if_empty'   => false
                ,'show_option_all' => sprintf(
                     get_taxonomy( $tax )->labels->all_items
                 )
                ,'hide_empty'      => false
                ,'hierarchical'    => is_taxonomy_hierarchical( $tax )
                ,'show_count'      => false
                ,'orderby'         => 'name'
                ,'selected'        => '0' !== get_query_var( $tax )
                    ? get_query_var( $tax )
                    : false
                ,'name'            => $tax
                ,'id'              => $tax
                ,'walker'          => $walker
            ) );
        }
    }

    /**
     * Add the parent post type as an attachment category
     * 
     * @author Rodolfo Buaiz
     */
    public function auto_tax( $post_id ) 
    {
        $the_p = get_post( $post_id );
        if( $the_p->post_parent > 0 ) 
        {
            $cpt = get_post_type( $the_p->post_parent );
            $term = term_exists( $cpt, 'attachment_category' );
            if( !$term )
                $term = wp_insert_term( $cpt, 'attachment_category' );

            wp_set_post_terms( $post_id, $term['term_id'], 'attachment_category', true );
        }
    }
} // end BUELTGE/KAISER/RUDOLF

// KAISER
class WCMF_walker extends Walker_CategoryDropdown
{
    var $tree_type = 'category';
    var $db_fields = array(
         'parent' => 'parent'
        ,'id'     => 'term_id'
    );
    public $tax_name;

    /**
     * @see   Walker::start_el()
     * @param  string $output Passed by reference. Used to append additional content.
     * @param  object $term   Taxonomy term data object.
     * @param  int    $depth  Depth of category. Used for padding.
     * @param  array  $args   Uses 'selected' and 'show_count' keys, if they exist.
     * @param  int    $id
     * @return void
     */
    function start_el( &$output, $term, $depth, $args, $id = 0 )
    {
        $pad = str_repeat( '&nbsp;', $depth * 3 );
        $cat_name = apply_filters( 'list_cats', $term->name, $term );

        $output .= sprintf(
             '<option class="level-%s" value="%s" %s>%s%s</option>'
            ,$depth
            ,$term->slug
            ,selected(
                 $args['selected']
                ,$term->slug
                ,false
             )
            ,"{$pad}{$cat_name}"
            ,$args['show_count']
                ? "&nbsp;&nbsp;({$term->count})"
                : ''
        );
    }
}
// end KAISER

Tôi nghĩ bây giờ là một ý tưởng tốt, rằng bạn tạo một repo Github và chúng tôi có thể giúp duy trì giải pháp. Nó dễ dàng hơn để sử dụng nó và tạo ra các cải tiến tùy chỉnh.
bueltge

-1

Plugin My Media Category sẽ làm điều này cho bạn - thậm chí nó còn dọn sạch giao diện trên Media Modal để bạn vẫn nhận được danh sách các hộp kiểm, theo mặc định tất cả những gì bạn nhận được là các trường văn bản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.