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

Posted

技术标签:

【中文标题】Wordpress - 从自定义帖子类型中删除子菜单【英文标题】:Wordpress - Remove submenu from custom post type 【发布时间】:2011-09-30 12:58:55 【问题描述】:

我创建了一个名为投资组合的自定义帖子类型,支持标签分类。

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

我试过了:

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

【问题讨论】:

【参考方案1】:

您可以使用remove_submenu_page() - 但诀窍是让 slug 完全正确,要做到这一点,最简单的方法是转储全局 $submenu 并检查 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_submenu_page('edit.php?post_type=my_events', 'edit-tags.php?taxonomy=post_tag&post_type=my_events');

请注意,子菜单 slug 是 html 编码的,因此 & 符号现在是 & - 这可能是人们难以从第一原理中找出 slug 名称应该是什么的原因。

【讨论】:

+1,它有效。 @IllesPeter,这应该是公认的答案。 +1 确认它有效。正如其他地方所报道的,这个函数对于同时得到两个参数非常敏感。值得坚持进行不同的调整以使其正确。 +1 超级有用!谢谢@benz001 应该是正确的答案。 编码字符 & 是一个重要提示。谢谢!【参考方案2】:

这有点脏,但它有效:

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;

当您加载管理区域时,一切都会中断,直到您删除该行,但它会向您显示结构和您需要的键。

【讨论】:

有点脏。我希望它可以与 remove_submenu_page() 一起使用,但由于它是唯一(有效的)答案,因此您会得到接受的答案:-)【参考方案3】:

最好只使用'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' );

【讨论】:

但这也会禁用元框。如果您只想从菜单中隐藏分类,@benz001 解决方案是最好的。【参考方案4】:

以 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 字段中看到的内容。

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

下面的第二个 arg 示例。

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

【讨论】:

以上是关于Wordpress - 从自定义帖子类型中删除子菜单的主要内容,如果未能解决你的问题,请参考以下文章

WordPress - 无法从自定义帖子类型中的元框获取价值

WordPress > 从自定义帖子类型获取自定义分类

Wordpress - 从自定义帖子类型查询第一个和名称

Wordpress ACF 字段如何从自定义帖子类型中获取选项

php 从自定义帖子类型中删除Slug

如何通过分类术语从自定义 WordPress MySQL 查询中排除结果