WordPress 3.5更改了媒体管理,现在媒体库编辑屏幕使用默认的帖子类型UI。分类法对于具有不同用户和附件的WP安装非常有用,为查找附件和/或添加分类提供了更多可能性。
我看到了Can I add a Category Metabox to attachment? 在WPSE上,但与WP 3.5一起使用并不完美,也没有关于附件上自定义类别使用的信息,不仅仅是帖子类别。
简而言之:是否可以将自定义类别/标签添加到附件中,以便在带有WP 3.5的媒体库中使用?
WordPress 3.5更改了媒体管理,现在媒体库编辑屏幕使用默认的帖子类型UI。分类法对于具有不同用户和附件的WP安装非常有用,为查找附件和/或添加分类提供了更多可能性。
我看到了Can I add a Category Metabox to attachment? 在WPSE上,但与WP 3.5一起使用并不完美,也没有关于附件上自定义类别使用的信息,不仅仅是帖子类别。
简而言之:是否可以将自定义类别/标签添加到附件中,以便在带有WP 3.5的媒体库中使用?
要从post类型post(默认设置)添加分类单元,那么很容易通过一个小插件添加分类单元“category”和“tags”,如下所示。
<?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
}
}
要在附件上使用自定义分类法,请创建自定义分类法并将其添加到post类型,这一点很重要attachment
, 比如follow插件。<?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
在下面的屏幕截图上看到结果,也看到区别-就像我的小词对源代码一样简单。但示例屏幕截图中我的个人图像与来源无关;)Small hints: 模式框中用于在帖子类型上添加媒体的UI与帖子类型附件上的编辑屏幕几乎没有什么不同。层次分类单元在编辑屏幕中只有一棵树。在模式框中,它是一个输入字段,税用逗号作为分隔符。另请参见this post 来自WP Core博客上的Helen。但也可以在屏幕截图中查看“标签”和“类别”的自定义分类法。
我会用Adding a Taxonomy Filter to Admin List for a Custom Post Type?
我将Frank的代码与Kaiser\'s answer 在那个岗位上。还额外添加了我的一点,添加了帖子类型,将附件上传到这里,作为一个类别。
它产生以下结果:
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(
\'<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\']
? " ({$term->count})"
: \'\'
);
}
}
// end KAISER
我的Media Categories 插件会帮你做到这一点-它甚至会清理媒体模式上的界面,这样你仍然可以得到复选框列表,默认情况下,你只会得到文本字段。
我想根据现有的分类术语从CPT获取一组帖子。我想我应该使用WP的get\\u posts()函数:$结果=获取文章(数组$选项);当我指定我感兴趣的CPT时,此函数工作正常:$results=get\\u posts(数组(\'post\\u type\'=>\'my\\u cpt\\u name\');但后来我用我的UOM自定义post类型尝试了这一点,并尝试使用公制进行筛选,公制是一种称为“UOM\\U system”的分类法:$results=get\\u posts(数组(\'post\\u