## Функция REMOVE_META_BOX() │ WP 2.6.0
Функция remove_meta_box()
удаляет метабокс из одного или нескольких экранов в админке WordPress. Метабокс — это специальный элемент, который может содержать разные данные, например, метаданные поста.
### Возвращаемое значение
Функция не возвращает ничего (null).
### Использование
```php
remove_meta_box( $id, $screen, $context );
- $id (string, обязательный) — идентификатор метабокса. Это то значение, которое используется в атрибуте 'id' метабокса.
- $screen (string|array|WP_Screen, обязательный) — экран или экраны, на которых отображается метабокс. Это может быть ID одного экрана, объект
WP_Screen
или массив ID экранов. - $context (string, обязательный) — контекст, в пределах которого метабокс должен отображаться. Контексты могут различаться в зависимости от экрана. Для экрана редактирования поста контексты включают 'normal', 'side' и 'advanced'. Для комментариев — 'normal' и 'side'.
Примеры
Пример 1: Удаление метабокса для пользовательских полей поста
Этот код удаляет блок с пользовательскими полями на странице редактирования поста:
add_action( 'add_meta_boxes', 'remove_post_custom_fields', 99 );
function remove_post_custom_fields(){
remove_meta_box( 'postcustom', 'post', 'normal' );
}
Пример 2: Удаление метабокса "Цитата"
Этот код убирает блок "Цитата" на страницах редактирования "статических страниц":
add_action( 'add_meta_boxes', 'remove_page_excerpt_field', 99 );
function remove_page_excerpt_field() {
remove_meta_box( 'postexcerpt', 'page', 'normal' );
}
Пример 3: Удаление блоков комментариев
Данный пример удаляет блоки "Комментарии", "Автор" и "Статус комментариев" с страницы редактирования "статических страниц":
add_action( 'add_meta_boxes', 'remove_page_fields', 99 );
function remove_page_fields() {
remove_meta_box( 'commentstatusdiv', 'page', 'normal' ); // удаляет статус комментариев
remove_meta_box( 'commentsdiv', 'page', 'normal' ); // удаляет комментарии
remove_meta_box( 'authordiv', 'page', 'normal' ); // удаляет автора
}
Пример 4: Удаление пользовательского таксономического блока
Если вам нужно удалить блок пользовательской таксономии на странице редактирования вашего кастомного поста, используйте следующий код:
add_action( 'add_meta_boxes', 'remove_custom_taxonomy', 99 );
function remove_custom_taxonomy() {
remove_meta_box( 'tagsdiv-custom_taxonomy_slug', 'name_type_post', 'side' );
}
Пример 5: Удаление блока публикации
Этот код удаляет блок публикации:
add_action( 'add_meta_boxes', 'remove_publish_box', 99 );
function remove_publish_box() {
remove_meta_box( 'submitdiv', 'custom_post_slug', 'side' );
}
Пример 6: Удаление блока комментариев, если тип поста не поддерживает комментарии
Иногда блок комментариев появляется, даже если пост не поддерживает комментарии. Этот код решает эту проблему:
add_action( 'add_meta_boxes', function( $post_type ) {
if ( ! post_type_supports( $post_type, 'comments' ) ) {
remove_meta_box( 'commentsdiv', $post_type, 'normal' ); // удаляет блок комментариев
}
} );
Примечания
- Глобальная переменная:
$wp_meta_boxes
— это массив, который хранит состояние метабоксов.
Изменения
- С версии 2.6.0 — функция была добавлена.
- С версии 4.4.0 — параметр
$screen
теперь принимает массив ID экранов.
Код функции REMOVE_META_BOX()
Ниже приведен код функции remove_meta_box
, котора�� находится в файле wp-admin/includes/template.php
:
function remove_meta_box( $id, $screen, $context ) {
global $wp_meta_boxes;
if ( empty( $screen ) ) {
$screen = get_current_screen();
} elseif ( is_string( $screen ) ) {
$screen = convert_to_screen( $screen );
} elseif ( is_array( $screen ) ) {
foreach ( $screen as $single_screen ) {
remove_meta_box( $id, $single_screen, $context );
}
}
if ( ! isset( $screen->id ) ) {
return;
}
$page = $screen->id;
if ( ! isset( $wp_meta_boxes ) ) {
$wp_meta_boxes = array();
}
if ( ! isset( $wp_meta_boxes[ $page ] ) ) {
$wp_meta_boxes[ $page ] = array();
}
if ( ! isset( $wp_meta_boxes[ $page ][ $context ] ) ) {
$wp_meta_boxes[ $page ][ $context ] = array();
}
foreach ( array( 'high', 'core', 'default', 'low' ) as $priority ) {
$wp_meta_boxes[ $page ][ $context ][ $priority ][ $id ] = false;
}
}