remove_meta_box

Удаляет Блоки на страницах редактирования/создания постов, постоянных страниц и произвольных типов записей.

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

remove_meta_box( $id, $screen, $context );
$id(строка) (обязательный)

id атрибут HTML тега, контейнера Блока. Базовые Блоки WordPress имеют следующие id:

  • authordiv – блок установки автора;
  • categorydiv – категории;
  • commentstatusdiv – блок статуса комментирования;
  • commentsdiv – блок комментариев;
  • formatdiv – форматы записей;
  • pageparentdiv – атрибуты постоянных страниц;
  • postcustom – блок произвольных полей;
  • postexcerpt – блок цитаты;
  • postimagediv – блок картинки к посту;
  • revisionsdiv – блок ревизий;
  • slugdiv – блок альтернативного названия статьи (slug);
  • trackbacksdiv – блок уведомлений;

По умолчанию: нет

$screen(строка/массив/WP_Screen) (обязательный)

Название экрана, на котором удаляется блок. Смотрите get_current_screen(). Например может быть:

  • Для типов записей: post, page, link, attachment или custom_post_type
  • Или для других страниц админки: link, comment.
  • Можно указать несколько типов в массиве: array(‘post’, ‘page’). C версии 4.4.
$context(строка) (обязательный)
Место где Блок выводится. Может быть: ‘normal’, ‘advanced’ или ‘side’.
По умолчанию: ‘advanced’

Примеры

#1 Удаление метабокса

Пример удаления Блока произвольных полей на странице редактирования постов:

function remove_post_custom_fields() {
	remove_meta_box( 'postcustom' , 'post' , 'normal' );
}
add_action( 'admin_menu' , 'remove_post_custom_fields' );

#2 Удаление “цитаты”

Пример удаления Блока “Цитата” со страниц редактирования “постоянных страниц”:

function remove_page_excerpt_field() {
	remove_meta_box( 'postexcerpt' , 'page' , 'normal' );
}
add_action( 'admin_menu' , 'remove_page_excerpt_field' );

#3 Удаление комментариев

Этот пример, удаляет Блоки “Комментарии”, “Автор” и “Статус Комментария” со со стариц редактирования “постоянных страниц”:

function remove_page_fields() {
	remove_meta_box( 'commentstatusdiv' , 'page' , 'normal' ); //removes comments status
	remove_meta_box( 'commentsdiv' , 'page' , 'normal' ); //removes comments
	remove_meta_box( 'authordiv' , 'page' , 'normal' ); //removes author
}
add_action( 'admin_menu' , 'remove_page_fields' );

#4 Удаление произвольных таксономий

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

function remove_custom_taxonomy(){
	remove_meta_box( 'tagsdiv-custom_taxonomy_slug', 'название_типа_поста', 'side' );
}
add_action( 'admin_menu', 'remove_custom_taxonomy' );

#5 Так можно удалить даже Блок публикации:

function remove_publish_box(){
	remove_meta_box( 'submitdiv', 'custom_post_slug', 'side' );
}
add_action( 'admin_menu', 'remove_publish_box' );

#6 Удалим метаблок ‘commentsdiv’ если тип поста не поддерживает ‘comments’.

В WordPress этот метабокс появляется в случаях, когда тип поста поддерживает ‘comments’ или если у поста есть комментарии или если комментарии открыты. А если для типа записи не указана поддержка ‘comments’, то метабокс все равно появляется и автор поста может редактировать комментарии. Иногда это не нужно и в этих случаях метабокс комментариев записи ‘commentsdiv’, можно удалить так:

// удалим метаблок 'commentsdiv' если тип поста не поддерживает 'comments'. странно что в WP это не так сделано!
//do_action( 'add_meta_boxes', $post_type, $post );
add_action( 'add_meta_boxes', function( $post_type ) {
	if( ! post_type_supports( $post_type, 'comments' ) )
		remove_meta_box( 'commentsdiv', $post_type, 'normal' ); //removes comments
} );

Код из


wp-admin/includes/template.php

WP 4.7.2

<?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;
}