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

11 июн. 2013 г., 21:49:27
Просмотры: 30K
Голосов: 22

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

Я прочитал удаление метабокса пользовательской таксономии из произвольного типа записи и Как удалить метабокс таксономии в стиле категорий (иерархический)?, но все еще не могу решить проблему.

Функция, которую я использую:

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, рекомендованный в Codex. Я пробовал использовать как normal, так и side в качестве третьего параметра.

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


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

2
Комментарии

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

JMau JMau
11 июн. 2013 г. 21:59:45

Я хочу, чтобы интерфейс оставался в меню, просто не отображался при редактировании записи.

mrwweb mrwweb
12 июн. 2013 г. 00:23:23
Все ответы на вопрос 5
3
68

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

В примере ниже установка show_ui в значение false полностью удалит метабокс с экрана редактирования, быстрого редактирования и из административного меню. Но если вы установите show_ui в true, вы можете добиться более тонкого управления, используя аргументы show_in_quick_edit и meta_box_cb (установка последнего в false скроет метабокс на экране редактирования 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,
);
26 янв. 2016 г. 20:45:10
Комментарии

Работает. Сохраняет меню админки и удаляет пользовательскую таксономию в форме добавления нового типа записи. Спасибо.

Dũng IT Dũng IT
10 июн. 2016 г. 13:01:47

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

Ryan H Ryan H
1 апр. 2017 г. 16:15:31

Гладко и просто.

Travis van der Font Travis van der Font
6 сент. 2018 г. 12:45:08
5

Вы говорите, что хотите убрать блоки с экрана редактирования записи (post), а не с экрана типа записи. В таком случае, вы можете зарегистрировать свою таксономию только для тех типов записей, к которым она должна применяться, и избежать этой проблемы. В примере из Codex таксономия регистрируется только для типа записи 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.

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

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

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

11 июн. 2013 г. 22:19:36
Комментарии

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

mrwweb mrwweb
12 июн. 2013 г. 00:25:52

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

s_ha_dum s_ha_dum
12 июн. 2013 г. 00:28:48

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

mrwweb mrwweb
12 июн. 2013 г. 00:34:00

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

Marcos Buarque Marcos Buarque
12 дек. 2017 г. 19:12:24

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

Davey Davey
2 мая 2018 г. 12:06:36
3

Таксономии по умолчанию регистрируют метабокс с использованием идентификатора tagsdiv-xxx. При использовании 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.

12 мар. 2018 г. 12:07:37
Комментарии

В tagsdiv должен быть завершающий символ -:

remove_meta_box( 'tagsdiv-'.$taxonomy, $post_type, 'side' );

Greg Haygood Greg Haygood
2 авг. 2019 г. 04:33:26

Это больше не работает в Gutenberg.

Sudar Sudar
19 нояб. 2020 г. 10:13:30

Начиная с WordPress 5.6, 'tagsdiv-' больше не действителен. Используйте следующую комбинацию для создания соответствующего id: remove_meta_box( $taxonomy . 'div', $post_type, 'side' );

Talha Imam Talha Imam
23 февр. 2021 г. 16:05:28
0

Попробуйте этот вариант или добавьте 'meta_box_cb' => false в ваш $args при вызове register_taxonomy

add_action('init', function () {
    register_taxonomy('your_taxonomy', 'your_post_type', [
        'labels' => [
            // параметры меток
        ],
        // другие параметры
        'show_ui' => true,
        'show_in_quick_edit' => false,
        'meta_box_cb' => false,        // просто добавьте эту строку
    ]);
});
8 февр. 2024 г. 14:52:26
1

Я пробовал приведенные выше решения для скрытия таксономии, но они не сработали. В итоге я нашел решение.

Добавьте этот код в файл functions.php вашей темы.

function Cc_Gutenberg_Register_files() 
{
    //подключаем пользовательский скрипт
    wp_register_script(
        'cc-block-script',
        get_stylesheet_directory_uri() .'/js/block-script.js',
        array( 'wp-blocks', 'wp-edit-post' )
    );
    // регистрируем скрипт для редактора блоков
    register_block_type( 'cc/ma-block-files', array(
        'editor_script' => 'cc-block-script'
    ) );     
}
add_action('init', 'Cc_Gutenberg_Register_files');

Для файла block-script.js можно использовать этот код.

wp.data.dispatch( 'core/edit-post').removeEditorPanel( 'taxonomy-panel-category' ) ; // Скрыть стандартную рубрику
wp.data.dispatch( 'core/edit-post').removeEditorPanel( 'taxonomy-panel-TAXONOMY-NAME' ) ; //Скрыть пользовательскую таксономию
9 нояб. 2021 г. 07:26:04
Комментарии

remove_meta_box( $id, $screen, $context ) действительно удаляет метабоксы из экрана "классического" редактора; это не работает для редактора блоков Gutenberg.

Ваше решение правильно для удаления метабоксов таксономий из редактора блоков.

Это упоминается здесь: https://developer.wordpress.org/reference/functions/remove_meta_box/#comment-5005

Pea Pea
5 сент. 2023 г. 07:10:29