Wordpress - Удалить подменю из пользовательского типа сообщения - PullRequest
6 голосов
/ 30 сентября 2011

Я создал пользовательский тип записи с именем портфолио с поддержкой таксономии тегов.

Поскольку WP не делает различий между тегами записей и тегами пользовательских типов записей, я создал пункт меню Таксономия, в который я хочу поместить категории и теги записей. Мне удалось создать меню и подменю, а также удалить теги категорий и сообщений из меню «Сообщения», но мне не удалось удалить теги сообщений из меню настраиваемого типа сообщений.

Я пытался:

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

Ответы [ 4 ]

18 голосов
/ 10 января 2012

Вы можете использовать remove_submenu_page() - хитрость, однако, заключается в том, чтобы правильно настроить слаг, для этого проще всего выгрузить глобальное подменю $ и проверить наличие menu_slug и submenu_slug.

global $submenu;
var_dump($submenu);

Это даст вам массив меню, клавишей верхнего уровня является menu_slug, а затем правильный элемент submenu_slug можно найти в элементе 2 вложенных массивов.

Так что, если бы у меня был пользовательский тип записи под названием "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', а параметр подменю для меню тегов - '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');

Обратите внимание, что слаг подменю закодирован в формате html, поэтому амперсанд теперь & - вероятно, именно из-за этого людям сложно понять из первых принципов, каким должно быть имя слага.

7 голосов
/ 03 декабря 2011

Это немного грязно, но работает:

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;
}

Все сломается, когда вы загрузите область администратора, пока не удалите эту строку, но она покажет вам структуру и какой ключ вам нужен.

0 голосов
/ 08 сентября 2018

Чтобы построить ответ от benz001:

Нет необходимости делать вар-дамп, чтобы правильно настроить слаг.Это сработало для меня.

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
0 голосов
/ 14 апреля 2014

Может быть лучше просто использовать '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' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...