Wie Verwenden von Taxonomien auf Anlagen mit der neuen Medienbibliothek?

WordPress 3.5 hat die Medienverwaltung geändert, und jetzt verwendet der Bearbeitungsbildschirm der Medienbibliothek die Standardbenutzeroberfläche vom Posttyp. Taxonomien sind sehr nützlich für WP-Installationen mit verschiedenen Benutzern und Anhängen, die mehr Möglichkeiten bieten, den Anhang zu finden und / oder eine Klassifikation hinzuzufügen.

Ich habe gesehen Kann ich eine Kategorie Metabox zum Anhang hinzufügen? auf WPSE, aber ist nicht perfekt für die Verwendung mit WP 3.5 und hat auch keine Informationen über die Verwendung von benutzerdefinierten Kategorien in Anlagen, nicht nur die Kategorien von Beiträgen.

Kurz gesagt: Ist es möglich, benutzerdefinierte Kategorien / Tags zu Anlagen hinzuzufügen, die in der Medienbibliothek mit WP 3.5 verwendet werden?

Solutions Collecting From Web of "Wie Verwenden von Taxonomien auf Anlagen mit der neuen Medienbibliothek?"

Um die Taxonmies aus dem Post-Post, dem Standard, hinzuzufügen, ist es leicht Taxonomien ‘Kategorie’ und ‘Tags’ mit einem kleinen Plugin hinzuzufügen.

< ?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 } } 

Für die Verwendung von benutzerdefinierten Taxonomien in Anhängen ist es wichtig, dass Sie eine benutzerdefinierte Taxonomie erstellen, und zwar für den Post-Typ- attachment , wie das folgende Plugin.

 < ?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 

Sehen Sie das Ergebnis auf dem folgenden Screenshot, auch der Unterschied - einfacher als meine kleinen Worte an die Quelle. Aber das Bild meiner Person im Screenshot ist nicht relevant für die Quelle;) Screenshot von Editiermedien im Standardposttyp ui mit WP 3.5

Kleine Hinweise: Die Benutzeroberfläche der modalen Box zum Hinzufügen von Medien zum Post-Typ ist ein kleines Gebot, das sich vom Bearbeitungsbildschirm beim Post-Typ-Anhang unterscheidet. Die hierarchischen Taxonmies haben nur einen Baum im Bearbeitungsbildschirm. In der modalen Box ist es ein Eingabefeld und die Steuer arbeitet mit Komma als Trennzeichen. Siehe auch diesen Post von Helen auf dem WP Core Blog. Aber sehen Sie sich die benutzerdefinierten Taxonomien für "Tags" und "Kategorien" auch in einem Screenshot an.

Anhang in modaler Box bearbeiten

Ich erweitere Franks Antwort durch Hinzufügen eines Taxonomie-Filters zur Admin-Liste für einen benutzerdefinierten Post-Typ?

Auf der Suche nach beiden Dingen, Media Categories und Taxonomy Filter habe ich Franks Code mit Kaisers Antwort in diesem Post zusammengeführt. Außerdem habe ich einen zusätzlichen Touch von mir hinzugefügt, um den Post-Typ, in den der Anhang hochgeladen wurde, als Kategorie hinzuzufügen.

Es produziert das:

Filtern von Medienkategorien

 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( ' ', $depth * 3 ); $cat_name = apply_filters( 'list_cats', $term->name, $term ); $output .= sprintf( '' ,$depth ,$term->slug ,selected( $args['selected'] ,$term->slug ,false ) ,"{$pad}{$cat_name}" ,$args['show_count'] ? "  ({$term->count})" : '' ); } } // end KAISER 

Mein Media Categories- Plugin wird dies für Sie tun – es räumt sogar die Oberfläche des Media Modal auf, so dass Sie immer noch die Liste der Checkboxen erhalten, standardmäßig erhalten Sie nur Textfelder.