Типы записей — это такой мега-удобный, а благодаря произвольным полям, ещё и расширяемый функционал в 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.
$args = array( ... 'publicly_queryable' => false, ... ); register_post_type( 'slide', $args );
Это может быть полезно также например тогда, когда все работы из портфолио у вас выводятся на одной странице и вы не хотите, чтобы каждая из работ была доступна отдельно.