Как использовать функцию REMOVE_META_BOX() в WordPress

## Функция 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;
    }
}

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *