Как отключить страницы постов (single-тип.php) определённого типа?

Типы записей — это такой мега-удобный, а благодаря произвольным полям, ещё и расширяемый функционал в WordPress, и именно поэтому его используют довольно много для каких целей, а не только для создания товаров в интернет-магазинах.

В этой статье я подробно рассмотрю ситуацию, когда при создании постов какого-то типа нам не нужно, чтобы на сайте для них создавалась страница. В качестве примера возьму иногда встречающуюся, не совсем удачную реализацию слайдера — это когда для слайдов регистрируется отдельный тип поста, в результате чего у каждого слайда появляется своя страница на сайте. А как вы знаете, если WordPress не находит файла single-тип_поста.php, то он использует файл записей single.php.

Обычно о таких вещах владельцы сайтов и не подозревают до тех пор, пока не обнаруживают свои слайды отдельными страницами в результатах поиска Google. Обратившись к сеошникам, они получают ответ — проставить 301 редирект с этих страниц например на главную.

add_action( 'template_redirect', 'true_slider_301' );
 
function true_slider_301() {
 
	if ( is_singular('slide') ) { // проверка того, что находимся на странице типа slide (я обозвал так для примера)
		wp_redirect( home_url(), 301 ); // редиректим
		exit;
	}
 
}

А на самом то деле, всё, что было нужно сделать — это указать при регистрации типа поста параметр publicly_queryable равным false. Тогда даже пропадут кнопки «Просмотреть» и «Просмотреть изменения» из админки WordPress.

При установке publicly_queryable false кнопки просмотра исчезнут для данного типа поста
$args = array(
	...
	'publicly_queryable' => false,
 
	...
);
register_post_type( 'slide', $args );

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

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

По теме:

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.