Функция возвращает название типа записи, 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;