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 - 无法从自定义帖子类型中的元框获取价值