Удалить пользовательский метабокс таксономии с экрана пользовательского типа записей


15

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

Я прочитал удалить пользовательский метабокс таксономической формы пользовательский тип публикации и Как удалить метабокс таксономии в стиле категории? но я все еще застрял

Я использую функцию:

function remove_taxonomies_metaboxes() {
    remove_meta_box( 'partner_typediv', 'partners', 'normal' );
    remove_meta_box( 'person_typediv', 'people', 'normal' );
}
add_action( 'admin_menu' , 'remove_taxonomies_metaboxes' );

Я удалил префикс post_types и custom_taxonomies, но это все. Я пытался использовать admin_menuкрючок и add_meta_boxesкрючок, рекомендованные Кодексом. Я пробовал оба normalи sideдля третьего параметра.

Вышеуказанная функция находится в mu-pluginsфайле под функцией, которая регистрирует типы записей и таксономии.


РЕДАКТИРОВАТЬ: Это была опечатка в функции register_taxonomy. Я ужасный человек. Спасибо всем за помощь. Я еще кое-что узнал!


даже с 'show_ui' => false?
JMau

1
Я хочу, чтобы интерфейс в меню все еще, но не при редактировании поста.
mrwweb

Ответы:


35

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

В приведенном ниже примере настройки , show_uiчтобы falseбыло полностью удалить METABOX с экрана редактирования, экран быстрого редактирования, и в меню администратора. Но если установить show_uiдля trueвас может достигнуть более тонкий контроль, а затем , используя show_in_quick_editи meta_box_cbаргументы (настройка позже ложных скрывает METABOX на экране CPT редактирования по желанию).

register_taxonomy( 'your_custom_taxonomy', array( 'your_custom_post_type' ), $args );
$args = array(
    'show_ui'                    => true,
    'show_in_quick_edit'         => false,
    'meta_box_cb'                => false,
);

Это работает. сохраните меню администратора и удалите пользовательскую таксономию в форме, добавьте новый пользовательский тип сообщения. Благодарю.
IT Vlogs

Спасибо! Я искал 'meta_box_cb' => false, чтобы скрыть его в post-new, где установка его в null просто отображает версию WordPress по умолчанию.
Райан Х

Плавно и просто.
Трэвис ван дер Фонт

6

Вы говорите, что хотите удалить поля с postэкрана редактирования, а не с экрана Тип сообщения, поэтому при условии, что вы должны иметь возможность регистрировать свою таксономию только для тех типов сообщений, к которым вы хотите ее применять, и вообще избегать этого. Пример в Кодексе регистрирует пример таксономии только для bookтипа записи, например:

register_taxonomy( 'genre', array( 'book' ), $args );

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

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

do_action('add_meta_boxes_' . $post_type, $post);

Или следовать примеру выше:

add_action('add_meta_boxes_book', 'your-box-callback');

Один из тех подходов должен решить это для вас. Я не думаю, что вы должны использовать remove_meta_boxвообще.

Если вы пытаетесь удалить мета-блоки из типа записи, в которой они зарегистрированы, это работает (снова следуя примеру в Кодексе):

function remove_taxonomies_metaboxes() {
    remove_meta_box( 'genrediv', 'book', 'side' );
}
add_action( 'add_meta_boxes_book' , 'remove_taxonomies_metaboxes' );

Я уверен, что admin_menuэто слишком рано, но не проверял это. add_metaboxesу меня тоже работает. Я не знаю, почему это не работает для вас.


Извините за то, что неясно. Я имел в виду экран Тип сообщения . Каждая таксономия зарегистрирована только для одного пользовательского типа сообщения. Я попытался использовать эту ловушку add_meta_boxes_ * кратко, но я попробую несколько вариантов этого (хотя я использую автоматически генерируемые метабоксы).
mrwweb

Тогда последний вариант в ответе должен это сделать. Я проверял это. Коробка уходит. Я не могу сказать, что понимаю логику наличия таксономий без рамок.
s_ha_dum

(См. Выше. Это была опечатка. Это на мне ... Спасибо за помощь). Чтобы ответить на ваш вопрос, я показываю таксономии с расширенным настраиваемым полем (это лучший интерфейс для пользователей сайта).
mrwweb

Ваш последний пример направил меня в правильном направлении, но вот что сработало для меня: add_action ('admin_menu', 'remove_taxonomies_metaboxes');
Маркос

Я обнаружил, что этот синтаксис не работает с текущей версией WordPress, проверьте этот ответ для рабочего решения.
Дэйви,

3

Используя ACF для управления пользовательскими таксономиями, метабоксы по умолчанию не нужны. Я попытался, успешно, этот код:

      function remove_cuttax_metaboxes() {
           $post_type = 'post';
           $taxonomy = 'custom_taxonomy_slug';
           remove_meta_box( 'tagsdiv'.$taxonomy, $post_type, 'side' );

       }
       add_action( 'admin_menu' , 'remove_cuttax_metaboxes', 100 );

Низкий приоритет (100) позволяет этому коду работать, даже если таксономии создаются таким плагином, как CPT-UI.


Тэгсдив должен иметь трейлинг -: remove_meta_box( 'tagsdiv-'.$taxonomy, $post_type, 'side' );
Грег Хейгуд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.