Удаление пункта меню, созданного плагином
Я пытаюсь удалить пункт меню и пробовал несколько подходов, но безрезультатно. Этот пункт был создан плагином FAQ.
Если я использую эту строку:
remove_menu_page( 'edit.php?post_type=question' );
Она удалит главное меню, однако я хочу удалить только два подпункта внутри этого URL-адреса edit.php?post_type=question
.
Для пунктов, которые я хочу удалить, URL-адрес в строке браузера показывает следующее:
edit-tags.php?taxonomy=faq-topic&post_type=question
и
edit-tags.php?taxonomy=faq-tags&post_type=question
Я пробовал несколько решений, включая remove_menu_page
и remove_submenu_page
, но без успеха.
Что не сработало:
remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags') ;
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags&post_type=question') ;
remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic');
remove_submenu_page( 'edit.php', 'edit-tags.php');

function remove_submenu() {
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question' );
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-tags&post_type=question' );
}
add_action( 'admin_menu', 'remove_submenu', 999 );
Пожалуйста, ознакомьтесь с Кодексом. Функция remove_submenu_page()
требует два параметра и правильный хук.
И очень важно: используйте очень, очень, очень высокий приоритет в вашем хуке! Если вы используете низкий приоритет, ваша функция выполнится до добавления меню. Таким образом, не будет меню для удаления. Если вы используете высокий приоритет, есть хороший шанс, что ваша функция выполнится после добавления меню.
Это может быть сложной частью.
ОБНОВЛЕНИЕ
После установки и анализа плагина я нашел решение. Есть несколько проблем и сложных моментов.
Подменю не добавляются с помощью add_submenu_page()
, они добавляются с пользовательским типом поста. Простой поиск по add_submenu_page()
, копирование слогов меню и удаление меню не сработает. Мне нужно искать slug CPT и использовать его.
После global $submenu; var_dump( $submenu );
я получил такой вывод:
[другие элементы]
'edit.php?post_type=question' =>
array (size=7)
5 =>
array (size=3)
0 => string 'FAQs' (length=4)
1 => string 'edit_posts' (length=10)
2 => string 'edit.php?post_type=question' (length=27)
10 =>
array (size=3)
0 => string 'Neue FAQ' (length=8)
1 => string 'edit_posts' (length=10)
2 => string 'post-new.php?post_type=question' (length=31)
15 =>
array (size=3)
0 => string 'FAQ Titel' (length=9)
1 => string 'manage_categories' (length=17)
2 => string 'edit-tags.php?taxonomy=faq-topic&post_type=question' (length=55)
16 =>
array (size=3)
0 => string 'FAQ Tags' (length=8)
1 => string 'manage_categories' (length=17)
2 => string 'edit-tags.php?taxonomy=faq-tags&post_type=question' (length=54)
[ другие элементы ]
Теперь было легко удалить подменю с помощью edit.php?post_type=question
как slug меню и edit-tags.php?taxonomy=faq-topic&post_type=question
/ edit-tags.php?taxonomy=faq-tags&post_type=question
как slug подменю.
Если присмотреться, амперсанд (&) представлен как HTML-сущность. Невозможно просто скопировать часть URL и вставить её. Таким образом, нельзя удалить подменю с незакодированным URL, он должен быть URL-кодированным.
И вот окончательный код:
add_action( 'admin_menu', 'remove_faq_subpages', 999 );
function remove_faq_subpages() {
$ptype = 'question';
remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-tags&post_type={$ptype}" );
remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-topics&post_type={$ptype}" );
}

К сожалению, это тоже не сработало. Следующий скриншот будет крайне полезен. Я попробовал сделать это другим способом... используя переменные на скриншоте, но не смог заставить это работать. http://s7.postimg.org/7m36rciob/this_might_help.jpg

Вот более четкий скриншот, извините, он немного обрезан http://s17.postimg.org/uj18k5vvz/FAQ_help.jpg

Откройте плагин, найдите строку, где меню добавляется с помощью add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );
. Используйте $parent_slug
и $menu_slug
для удаления подменю.

Я также обновил свой ответ. Приоритет вашего хука очень важен, потому что add_submenu_page()
и remove_submenu_page()
используют один и тот же хук. Убедитесь, что ваш remove_submenu_page()
вызывается как можно позже.

Ваши комментарии были полезны, но я не уверен, как удалить это... даже после просмотра файла faq-manager.php внутри этого плагина.
Я использую этот плагин: http://wordpress.org/extend/plugins/wordpress-faq-manager/
Я видел упомянутый вами $parent_slug и $menu_slug, но это не особо помогло... $parent_slug у нас правильный, а вот $menu_slug под вопросом... Возможно, вы сможете разобраться, посмотрев сам плагин.

Я пошел по легкому пути и нашел плагин, который смог это сделать. Я использовал Adminimize и легко справился с задачей.

О, черт возьми, да, я забыл о возможности использовать этот плагин. Фрэнк недавно обновил плагин, он очень хорош.

В конце концов я нашел причины, по которым все решения не работали. Сначала это был пользовательский тип записи, а не подменю. И URL должен быть закодирован. Простой амперсанд (&) в URL не сработает.
