get_post_type() — возвращает тип указанного поста

Функция возвращает название типа записи, ID которого указан в параметрах функции. Если ID не был указан, то возвращает тип текущего поста в цикле.

Возвращает логическое значение false в том случае, если поста, который был передан в параметрах, не существует.

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

get_post_type( $post = null )

Параметры

$post
(целое число|WP_Post|null) ID или объект поста, тип которого нужно получить.

Примеры

1. Условие с использованием функции

Окей, допустим мы хотим получить название типа записи какого-то определённого поста. Для чего это может быть нужно чаще всего? Ну по факту для каких-либо условий, типа этого:

$post_id = 155;
 
if( 'page' === get_post_type( $post_id ) ) {
	// Ого, запись с ID 155 оказывается Страница!
}

Когда бывает нужно такое условие? Например когда ваша функция коннектится к хуку, который сам по себе срабатывает для всех типов записей! А нам это не нужно! Хороший пример – save_post.

add_action( 'save_post', 'true_save_only_page_post', 25 );
 
function true_save_only_page_post( $post_id ) {
 
	// выходим из функции, если хук сработал не для нужного нам типа поста
	if( 'true_post_type' !== get_post_type( $post_id ) ) {
		return $post_id; 
	}
 
	// а дальше код, который должен срабатывать для всех типов записей кроме true_post_type
 
}

2. Работаем с функцией внутри цикла WordPress

И снова, перед написанием примера, задаю себе вопрос, какое именно практическое применение функции get_post_type() в циклах чаще всего встречается?

Прежде всего – это подключение разных файлов темы для разных типов постов.

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

Ну погнали уже пример.

while( have_posts() ) : the_post();
 
	get_template_part( 'entry', get_post_type() );
 
endwhile;

Супер-изишный пример, даже и сказать нечего. Но в целом рекомендуется почитать и про функцию get_template_part(). Получается, что у нас в теме есть какие-то файлы типа entry-post.php, entry-page.php, entry-my_custom_type.php и так далее. И благодаря функции get_template_part() и её второму параметру, нам даже не нужно создавать никаких условий для разных типов записей – нужные файлы подключатся автоматически в зависимости от переданного значения параметра. Но тем не менее рекомендуется иметь в теме также и файл entry.php, потому что, если вдруг получится так, что в теме не достаёт файла для какого-то типа записи, то подключится entry.php и в целом ничего сильно не сломается.

Другой пример будет ещё лайтовее – используем для стилизации лишь CSS-класс.

if( have_posts() ) :
	echo '<ul>';
	while( have_posts() ) : the_post();
		echo '<li class="entry entry-' . get_post_type() . '">' . get_the_title() . '</li>';
	endwhile;
	echo '</ul>';
endif;

Миша

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

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

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