Удаление метабокса пользовательской таксономии с экрана произвольного типа записи
У меня есть две иерархические пользовательские таксономии, каждая для соответствующего произвольного типа записи. Я хочу удалить метабокс для каждой из них на экране редактирования типа записи.
Я прочитал удаление метабокса пользовательской таксономии из произвольного типа записи и Как удалить метабокс таксономии в стиле категорий (иерархический)?, но все еще не могу решить проблему.
Функция, которую я использую:
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. Я ужасный человек. Спасибо всем за помощь. Я все равно узнал кое-что новое!
Если вы вручную регистрируете свою пользовательскую таксономию через 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,
);

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

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

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

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

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

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

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

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

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

В tagsdiv должен быть завершающий символ -:
remove_meta_box( 'tagsdiv-'.$taxonomy, $post_type, 'side' );

Попробуйте этот вариант или добавьте '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, // просто добавьте эту строку
]);
});

Я пробовал приведенные выше решения для скрытия таксономии, но они не сработали. В итоге я нашел решение.
Добавьте этот код в файл 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' ) ; //Скрыть пользовательскую таксономию

remove_meta_box( $id, $screen, $context )
действительно удаляет метабоксы из экрана "классического" редактора; это не работает для редактора блоков Gutenberg.
Ваше решение правильно для удаления метабоксов таксономий из редактора блоков.
Это упоминается здесь: https://developer.wordpress.org/reference/functions/remove_meta_box/#comment-5005
