Wordpress - 从自定义帖子类型中删除子菜单

问题描述 投票:6回答:4

我创建了一个带有标签分类支持的自定义帖子类型命名组合。

由于WP在帖子标签和自定义帖子类型标签之间没有区别,我创建了一个菜单项Taxonomy,我想在其中放置类别和帖子标签。我设法创建菜单和子菜单,并从Post菜单中删除类别和帖子标签,但我没有设法从自定义帖子类型菜单中删除帖子标签。

我试过了:

remove_submenu_page( 'edit.php?post_type=portfolio', 'edit-tags.php?taxonomy=post_tag&post_type=portfolio' );
wordpress custom-post-type
4个回答
7
投票

这有点脏,但它有效:

add_action('admin_menu', 'remove_niggly_bits');
function remove_niggly_bits() {
    global $submenu;
    unset($submenu['edit.php?post_type=portfolio'][11]);
}

我不确定你要删除哪个密钥号码。找到它的最佳方法是:

add_action('admin_menu', 'remove_niggly_bits');
function remove_niggly_bits() {
    global $submenu;
    //unset($submenu['edit.php?post_type=portfolio'][11]);
    print_r($submenu); exit;
}

加载管理区域时,一切都会中断,直到删除该行,但它会显示结构和所需的密钥。


18
投票

您可以使用remove_submenu_page() - 然而诀窍是让slug完全正确,为此,最简单的方法是转储全局$子菜单并检查menu_slug和submenu_slug。

global $submenu;
var_dump($submenu);

这将为您提供菜单数组,顶级键是menu_slug,然后可以在嵌套数组的元素2中找到正确的submenu_slug。

所以,如果我有一个名为“my_events”的自定义帖子类型,并且我想从中删除标签菜单,我的原始菜单结构将如下所示

...
'edit.php?post_type=my_events' => 
    array
      5 => 
        array
          0 => string 'All Events' (length=10)
          1 => string 'edit_posts' (length=10)
          2 => string 'edit.php?post_type=my_events' (length=28)
      10 => 
        array
          0 => string 'Add New' (length=7)
          1 => string 'edit_posts' (length=10)
          2 => string 'post-new.php?post_type=my_events' (length=32)
      15 => 
        array
          0 => string 'Tags' (length=4)
          1 => string 'manage_categories' (length=17)
          2 => string 'edit-tags.php?taxonomy=post_tag&post_type=my_events' (length=55)
...

从这里你可以看到menu_slug是'edit.php?post_type=my_events',标签菜单的子菜单slug是'edit-tags.php?taxonomy=post_tag&post_type=my_events'

所以remove函数调用将是:

remove_submenu_page('edit.php?post_type=my_events', 'edit-tags.php?taxonomy=post_tag&post_type=my_events');

请注意,submenu slug是html编码所以&符号现在是& - 这可能是因为人们很难从第一原则中找出slug名称应该是什么。


0
投票

最好只使用'show_ui' => false

function car_brand_init() {
    // new taxonomy named merk
    register_taxonomy(
        'merk',
        'lease_fop',
        array(
            'label' => __( 'Merken' ),
            'rewrite' => array( 'slug' => 'merken' ),
            'update_count_callback' => '_update_post_term_count',
            // use this to hide from menu
            'show_ui' => false,
            'capabilities' => array(
                'assign_terms' => 'edit_guides',
                'edit_terms' => 'publish_guides'
            )
        )
    );
}
add_action( 'init', 'car_brand_init' );

0
投票

以benz001的答案为基础:

无需进行var转储以获得正确的slug。这对我有用。

remove_submenu_page('edit.php?post_type=POST_TYPE', 'edit-tags.php?taxonomy=TAXONOMY_SLUG&post_type=POST_TYPE')

第一个参数,在后端查看存档时,将POST_TYPE替换为您在浏览器顶部的URL字段中看到的内容。

第二个参数:左键单击要删除的子菜单,复制链接,删除最后一个正斜杠及其左侧的所有内容。将&替换为&

下面的第二个例子。

1复制并粘贴子菜单链接

http://yourwebsite.com/wp-admin/edit-tags.php?taxonomy=your_custom_taxonomy&post_type=your_custom_post

2删除最后一个正斜杠及其剩余部分。

edit-tags.php?taxonomy=your_custom_taxonomy&post_type=your_custom_post

3将&替换为HTML实体&

/edit-tags.php?taxonomy=your_custom_taxonomy&post_type=your_custom_post
© www.soinside.com 2019 - 2024. All rights reserved.