remove_post_type_support()

Функция позволяет отключить функциональную возможность (фичу) для определённого типа постов. Противоположна функции add_post_type_support(), которая наоборот подключает её.

Должна использоваться на хуке init после регистрации типа записи, с которым будем работать.

А вообще, рекомендую моё подробное руководство по произвольным типам записей.

remove_post_type_support( $post_type, $feature )

Параметры

$post_type
(строка) Название типа записей, для которого хотим отключить фичу.
$feature
(строка) Фича, которую нужно отключить, может принимать значения:
  • title
  • editor
  • author
  • thumbnail
  • excerpt
  • trackbacks
  • custom-fields
  • comments (также скроет отображение количества комментов в таблицах, где выводятся все записи типа)
  • revisions (также перестанут сохраняться редакции для этого типа записей)
  • page-attributes
  • post-formats
Более подробное описание фич можете почитать здесь.

Примеры

1. Отключение неиспользуемых фич

В реальной жизни такое часто пригождалось, когда делаешь сайт для клиента и хочешь настроить админку, чтобы там всё было идеально, а у клиента не возникало странных вопросов из серии «А что это такое – трэкбэки?».

add_action( 'init', 'true_remove_trackbacks_and_author', 10 );
 
function true_remove_trackbacks_and_author() {
	remove_post_type_support( 'post', 'trackbacks' );
	remove_post_type_support( 'post', 'author' );
}

Все эти истории кстати отлично работают и в Gutenberg. В качестве примера мы же отключали автора в коде выше?

Вот что было до вставки кода (не знаете, куда вставлять?).

add_post_type_support() author

А вот что после:

remove_post_type_support author

2. Отключаем редактор контента при использовании определённого шаблона страницы

Хочу поделиться с вами довольно интересным кодом, который позволит отключить редактор контента для типа записей Страницы, если у страницы установлен определённый шаблон.

add_action( 'init', 'true_remove_editor_for_template' );
 
function true_remove_editor_for_template() {
 
	// выходим из функции, если не находимся в админке
	if ( ! is_admin() ) {
		return;
	}
 
	// получаем ID поста
	$post_id = ! empty( $_GET[ 'post' ] ) && $_GET[ 'post' ] ? $_GET[ 'post' ] : ( ! empty( $_POST[ 'post_ID' ] ) && $_POST[ 'post_ID' ] ? $_POST[ 'post_ID' ] : null );
 
	// если ID поста не существует, выходим
	if( ! $post_id ) {
		return;
	}
 
	// получаем используемый шаблон страницы
	$template_file = get_post_meta( $post_id, '_wp_page_template', true );
 
	// если он соответстует определённому, отключаем редактор
	if (  'page-templates/contact.php' === $template_file ) {
		remove_post_type_support( 'page', 'editor' );
	}
 
}

Для всех интересующихся – очистка $post_id тут не нужна, потому что мы используем его только в функции get_post_meta(), а она об этом позаботится сама (функцией absint(), кому интересно). Хотя соглашусь безусловно, что в некоторых случаях better safe than sorry.

По факту вот что у меня получилось:

Отключение поддержки editor при выборе определённого шаблона страницы
Обратите внимание, что в метабоксе атрибутов страницы у меня выбран шаблон «Страница контактов» – это как раз и есть page-templates/contact.php.

Добавлю также, что у меня был включен Gutenberg для Страниц, и отключение editor функцией remove_post_type_support() привело к отключению Gutenberg целиком.

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Комментарии — 1

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал