Как отключить страницы постов (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 или следите за мной в социальных сетях.
  • alex morozov: Ура, спасибо! Все-таки я разобрался ! Сделал:

  • alex morozov: Сделал Класс добаляется даже если поле пустое

  • Vladislav: Лучше бы посоветовали изящное решение имеющейся проблемы.

  • alex morozov: Не очень понял. Я добавляю метабокс через класс, почти как у вас. class Desc_Meta_Box { private $screens = array(...

  • Миша: Метод тыка хорош, но оснвоы нужно знать в любом случае. Рекомендую почитать это.