在自定义帖子类型列表中显示自定义分类列

时间:2011-11-11 07:40:19

标签: wordpress

我创建了一个名为横幅的自定义帖子类型。因此,我注册了一个名为 location 的新分类法,指定要在哪个页面上显示横幅。一切都很棒,但是当我点击管理窗口中的自定义帖子类型“横幅”时,我看到所有横幅都已创建,但是该表没有分类“位置”的列。

换句话说,我希望能够在横幅列表中查看横幅所在的位置。

4 个答案:

答案 0 :(得分:26)

对于那些感兴趣的人,register_taxonomyWordPress 3.5函数现在为show_admin_column提供了一个参数(默认为false)。设置为true,它会自动在管理中显示分类列。

答案 1 :(得分:7)

您可以使用manage_post-type_custom_column和manage_edit_post-type_columns过滤器将分类列添加到帖子类型列表中。

add_action( 'admin_init', 'my_admin_init' );
function my_admin_init() {
    add_filter( 'manage_edit-banner_columns', 'my_new_custom_post_column');
    add_action( 'manage_banner_custom_column', 'location_tax_column_info', 10, 2);
}

function my_new_custom_post_column( $column ) {
    $column['location'] = 'Location';

    return $column;
}

function location_tax_column_info( $column_name, $post_id ) {
        $taxonomy = $column_name;
        $post_type = get_post_type($post_id);
        $terms = get_the_terms($post_id, $taxonomy);

        if (!empty($terms) ) {
            foreach ( $terms as $term )
            $post_terms[] ="<a href='edit.php?post_type={$post_type}&{$taxonomy}={$term->slug}'> " .esc_html(sanitize_term_field('name', $term->name, $term->term_id, $taxonomy, 'edit')) . "</a>";
            echo join('', $post_terms );
        }
         else echo '<i>No Location Set. </i>';
}

答案 2 :(得分:4)

 //what version of wordpress you are using
 //since wp 3.5 you can pass parameter show_admin_column=>true
 // hook into the init action and call create_book_taxonomies when it fires
 add_action( 'init', 'create_book_taxonomies', 0 );

 // create two taxonomies, genres and writers for the post type "book"
 function create_book_taxonomies() {
 // Add new taxonomy, make it hierarchical (like categories)
$labels = array(
    'name'              => _x( 'Genres', 'taxonomy general name' ),
    'singular_name'     => _x( 'Genre', 'taxonomy singular name' ),
    'search_items'      => __( 'Search Genres' ),
    'all_items'         => __( 'All Genres' ),
    'parent_item'       => __( 'Parent Genre' ),
    'parent_item_colon' => __( 'Parent Genre:' ),
    'edit_item'         => __( 'Edit Genre' ),
    'update_item'       => __( 'Update Genre' ),
    'add_new_item'      => __( 'Add New Genre' ),
    'new_item_name'     => __( 'New Genre Name' ),
    'menu_name'         => __( 'Genre' ),
);

$args = array(
    'hierarchical'      => true,
    'labels'            => $labels,
    'show_ui'           => true,
    'show_admin_column' => true,
    'query_var'         => true,
    'rewrite'           => array( 'slug' => 'genre' ),
);

register_taxonomy( 'genre', array( 'book' ), $args );
 }

答案 3 :(得分:0)

除了乔纳森·沃尔德(Jonathan Wold)的答案外,您还可以像这样通过自定义分类法进行过滤:

add_action('restrict_manage_posts', 'filter_post_type_backend_by_taxonomies', 99, 2);

function filter_post_type_backend_by_taxonomies($post_type, $which) {
    if( 'your_post_type' !== $post_type) {
        return;
    }
    
    $taxonomies = array( 'your_custom_taxonomy' );
    
    foreach( $taxonomies as $taxonomy_slug ) {
        $taxonomy_obj = get_taxonomy( $taxonomy_slug );
        $taxonomy_name = $taxonomy_obj->labels->name;
        
        $terms = get_terms($taxonomy_slug);
        
        echo "<select name='{$taxonomy_slug}' id='{$taxonomy_slug}' class='postform'>";
        echo '<option value="">' . sprintf( esc_html__( 'Show all %s', 'domain-name' ), $taxonomy_name) . '</option>';
        foreach ( $terms as $term ) {
            printf(
                    '<option value="%1$s" %2$s>%3$s (%4$s)</option>',
                    $term->slug,
                    ( ( isset( $_GET[$taxonomy_slug] ) && ( $_GET[$taxonomy_slug] == $term->slug ) ) ? ' selected="selected"' : '' ),
                    $term->name,
                    $term->count
            );
            }
        echo '</select>';
    }
}