is_post_type – функция для проверки типа записи в WordPress

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

if(is_post_type())

Однако, эта функция вам не даст результата.

Чтобы эта конструкция начала работать, можно создать аналогичную функцию. Например, скопируйте этот код ниже и добавьте в файл functions.php вашего шаблона:


function onwp_is_post_type(string $post_type)
{
	global $post;
	
	if(!$post) return false;

	$original_post_type = get_post_type( $post->ID );

	if($original_post_type === $post_type) return true;

	return false;
}

Затем можно вызвать эту функцию в файлах шаблона loop.php или single.php или в других аналогичных. Если функция будет вызвана на странице, которая не является постом WordPress, то всегда будет возвращаться false.

Вызывать эту функцию можно так:

$result = onwp_is_post_type('product');

if($result) {
    #Если тип записи соответствует product, то делаем что-то
} else {
   #Если тип записи НЕ соответствует product, то делаем что-то другое
}

Если не нужна специальная отдельная функция и нужно выполнить проверку непосредственно в шаблоне loop.php или single.php, то можно использовать код ниже. ПРимер из реального проекта.

Для проверки типа записи у текущего поста нужно использовать следующую конструкцию:

<?php $post_type = get_post_type( $post_id ) ?> 
 <? if ($post_type == 'apartments') { echo 'Квартира'; } 
 elseif ($post_type == 'houses') { echo 'Дом'; }
 elseif ($post_type == 'plots') { echo 'Участок'; } 
 elseif ($post_type == 'commercials') { echo 'Коммерческая недвижимость'; } 
 elseif ($post_type == 'hotels') { echo 'Гостиница'; } 
 else { echo 'Новость'; }
 ?>

В данном случае, мы сначала запрашиваем тип публикации, затем сравниваем его с нужным нам типом и, в соответствии с ответом, выдаем результат.