Wordpress - 从管理菜单中删除自定义分类

时间:2017-10-06 13:23:26

标签: php wordpress

我制作了自定义分类法,我正在使用几种不同的帖子类型:

<?php
add_action('init', function() {
    register_post_type('intranet-categories', [
        'labels' => [
            'name'                  => 'Kategorier',
            'singular_name'         => 'Kategorier',
            'menu_name'             => 'Kategorier',
            'name_admin_bar'        => 'Kategorier',
            'add_new'               => 'Legg til ny',
            'add_new_item'          => 'Ny Kategori',
            'new_item'              => 'Ny Kategori',
            'edit_item'             => 'Rediger Kategori',
            'view_item'             => 'Vis Kategori',
            'all_items'             => 'Alle Kategorier',
            'search_items'          => 'Søk',
            'parent_item_colon'     => 'Forelder',
            'not_found'             => 'Fant ingen Kategori.',
            'not_found_in_trash'    => 'Fant ingen Kategori i søppelkassen.',
        ],
        'description'           => 'Kategori',
        'public'                => true,
        'publicly_queryable'    => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'query_var'             => true,
        'rewrite'               => ['slug' => 'intranet-categories'],
        'capability_type'       => 'post',
        'has_archive'           => true,
        'hierarchical'          => false,
        'menu_position'         => null,
        'menu_icon'             => 'dashicons-editor-ol',
        'supports'              => ['title', 'editor', 'excerpt', 'thumbnail'],
        'capability_type' => 'custom_post_type',
        'capabilities' => ['create_posts' => false],
    ]);

    register_taxonomy('department', ['intranet-categories', 'intranet-post'], [
        'labels' => [
            'name'              => 'Avdeling',
            'singular_name'     => 'Avdeling',
            'search_items'      => 'Søk',
            'all_items'         => 'Alle avdelinger',
            'parent_item'       => 'Forelder',
            'parent_item_colon' => 'Forelder',
            'edit_item'         => 'Rediger avdeling',
            'update_item'       => 'Oppdater avdeling',
            'add_new_item'      => 'Opprett avdeling',
            'new_item_name'     => 'Ny avdeling',
            'menu_name'         => 'Avdelinger',
        ],
        'hierarchical'      => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => ['slug' => 'avdeling'],
    ]);

    register_taxonomy('region', ['intranet-categories', 'intranet-post'], [
        'labels' => [
            'name'              => 'Region',
            'singular_name'     => 'Region',
            'search_items'      => 'Søk',
            'all_items'         => 'Alle region',
            'parent_item'       => 'Forelder',
            'parent_item_colon' => 'Forelder',
            'edit_item'         => 'Rediger Region',
            'update_item'       => 'Oppdater Region',
            'add_new_item'      => 'Opprett Region',
            'new_item_name'     => 'Ny Region',
            'menu_name'         => 'Regioner',
        ],
        'hierarchical'      => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => ['slug' => 'avdeling'],
    ]);

    register_taxonomy('industry', ['intranet-categories', 'intranet-post'], [
        'labels' => [
            'name'              => 'Bransje',
            'singular_name'     => 'Bransje',
            'search_items'      => 'Søk',
            'all_items'         => 'Alle bransjer',
            'parent_item'       => 'Forelder',
            'parent_item_colon' => 'Forelder',
            'edit_item'         => 'Rediger bransje',
            'update_item'       => 'Oppdater bransje',
            'add_new_item'      => 'Opprett bransje',
            'new_item_name'     => 'Ny bransje',
            'menu_name'         => 'Bransjer',
        ],
        'hierarchical'      => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
            'rewrite' => ['slug' => 'bransje'],
        ]
    );

    register_taxonomy('role', ['intranet-categories', 'intranet-post'], [
        'labels' => [
            'name'              => 'Rolle',
            'singular_name'     => 'Rolle',
            'search_items'      => 'Søk',
            'all_items'         => 'Alle roller',
            'parent_item'       => 'Forelder',
            'parent_item_colon' => 'Forelder',
            'edit_item'         => 'Rediger rolle',
            'update_item'       => 'Oppdater rolle',
            'add_new_item'      => 'Opprett rolle',
            'new_item_name'     => 'Ny rolle',
            'menu_name'         => 'Roller',
        ],
        'hierarchical'      => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
            'rewrite' => ['slug' => 'rolle'],
        ]
    );

    register_taxonomy('company', ['intranet-categories', 'intranet-post'], [
        'labels' => [
            'name'              => 'Selskap',
            'singular_name'     => 'Selskap',
            'search_items'      => 'Søk',
            'all_items'         => 'Alle selskaper',
            'parent_item'       => 'Forelder',
            'parent_item_colon' => 'Forelder',
            'edit_item'         => 'Rediger selskap',
            'update_item'       => 'Oppdater selskap',
            'add_new_item'      => 'Opprett selskap',
            'new_item_name'     => 'Ny selskap',
            'menu_name'         => 'Selskaper',
        ],
        'hierarchical'      => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
            'rewrite' => ['slug' => 'selskap'],
        ]
    );
});

我想要做的是在intranet-post类型的管理菜单中隐藏创建的自定义分类,并且只在intranet-categories的管理菜单中显示它们,因为我只想编辑这些自定义分类并从intranet-categories帖子类型向其添加术语。我尝试过这样做的事情:

function remove_taxonomy_submenu_pages() {
    $categories = get_object_taxonomies('intranet-categories');
    foreach($categories as $category) {
        remove_menu_page( 'edit.php', 'edit-tags.php?taxonomy=' . $category . '&post_type=intranet-post' );
    }
}

add_action( 'admin_menu', 'remove_taxonomy_submenu_pages', 20);

但是,这不起作用,这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,最简单的方法就是只为你想要的帖子类型注册分类法。所以你需要删除其他帖子类型。

register_taxonomy('company', ['intranet-categories']

这将仅针对内部网类别注册此分类。

希望它有所帮助。

答案 1 :(得分:0)

&#34; WordPress&#34;限制自定义帖子类型可用的分类法的方法是在注册分类法时注册帖子类型 - 无论哪种方式。

因此,在您想要注册此分类法的帖子类型中,添加以下参数:

register_post_type(
    ...
    'taxonomies' => [ 'intranet-categories' ]
    ...
);

和/或在注册分类时,定义(在注册中)应分配给哪些类型的帖子:

register_taxonomy('company', ['intranet-categories'], [...

但是,您似乎已经知道这一点(基于您的代码),并且您仍然希望与intranet-posts相关联的分类法,您只是不希望它显示在管理员中?

所以 - 为了从仪表板中删除菜单项,你可以这样做:

function remove_taxonomy_submenu_pages() {
    global $menu;
    // see the menu items
    var_dump( $menu );
    // after var_dump, you can see which item you want to remove, so you can remove like so:
    foreach ( $menu as $i => $item ) {
        // assuming 'intranet-post' is the menu item (which it probably isn't, find it using the var_dump info above)
        if ( 'intranet-post' == $item[2] ) {
            unset( $menu[$i] );
        }
    }
}

add_action( 'admin_menu', 'remove_taxonomy_submenu_pages', 9999);