Как проверить, является ли запись пользовательским типом записи?
Я ищу способ проверить, является ли запись пользовательским типом записи. Например, в сайдбаре я могу использовать такой код:
if ( is_single() ) {
// Код здесь
}
Мне нужен код, который проверяет только пользовательский тип записи.

if ( is_singular( 'book' ) ) {
// условный контент/код
}
Вышеприведенное условие возвращает true
при просмотре записи пользовательского типа: book
.
if ( is_singular( array( 'newspaper', 'book' ) ) ) {
// условный контент/код
}
Вышеприведенное условие возвращает true
при просмотре записи пользовательских типов: newspaper
или book
.
Эти и другие условные теги можно посмотреть здесь.

Вот так: get_post_type()
и затем if ( 'book' == get_post_type() ) ...
как указано в Условные теги > Тип записи в Кодексе.

is_singular()
немного более компактный вариант Условные теги > Отдельная страница, отдельная запись или вложение

@Rarst Это применимо только к шаблону отдельной записи произвольного типа записи (CPT). get_post_type()
- правильный способ для более широкого подхода (например, на странице поиска)

@amarinediary Я думаю, на тот момент было неясно, интересует ли определение главной страницы-определяющей записи или просто какой-то записи в произвольном цикле. Соответственно будет варьироваться подходящий способ выражения с помощью шаблонного тега. :)

Чтобы проверить, является ли запись любым произвольным типом записи, получите список всех не встроенных типов записей и проверьте, находится ли тип записи в этом списке.
В виде функции:
/**
* Проверяет, является ли запись произвольным типом записи.
* @param mixed $post Объект записи или ID
* @return boolean
*/
function is_custom_post_type( $post = NULL )
{
$all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );
// если нет произвольных типов записей
if ( empty ( $all_custom_post_types ) )
return FALSE;
$custom_types = array_keys( $all_custom_post_types );
$current_post_type = get_post_type( $post );
// не удалось определить текущий тип
if ( ! $current_post_type )
return FALSE;
return in_array( $current_post_type, $custom_types );
}
Использование:
if ( is_custom_post_type() )
print 'Это произвольный тип записи!';

Добавьте это в ваш functions.php
, и вы получите функциональность, которую можно использовать как внутри, так и вне цикла:
function is_post_type($type){
global $wp_query;
if($type == get_post_type($wp_query->post->ID))
return true;
return false;
}
Теперь вы можете использовать следующее:
if (is_single() && is_post_type('post_type')){
// Творите магию
}

Спасибо, это очень полезно! Но должно быть так: if (is_single() && is_post_type('post_type')){ //work magic } Отсутствовала закрывающая скобка.... С наилучшими пожеланиями, Этель

У кого-нибудь еще это перестало работать? Я использовал это долгое время, но внезапно перестало работать. Однако, использование того же метода без global $wp_query всегда работает: if ( 'post-type' == get_post_type() ) {}

Если вы хотите проверить на наличие всех ваших произвольных типов записей:
if( ! is_singular( array('page', 'attachment', 'post') ) ){
// echo 'Это произвольный тип записи!';
}
Таким образом, вам не нужно знать название вашего произвольного типа записи. Кроме того, код будет продолжать работать, даже если вы позже измените название произвольного типа записи.

Чтобы легко определить $post_type внутри функции, сначала необходимо вызвать глобальную переменную post, вот пример:
function the_views() {
global $post;
if ($post->post_type == "game") {
$span = '<span class="fa-gamepad">';
} else { // Обычный пост
$span = '<span class="fa-eye">';
}
}

Я ознакомился со всеми ответами, они рабочие, но самый простой способ, который вы можете использовать для проверки, является ли запись стандартной или пользовательской, это:
is_singular('post') // для стандартных записей
!is_singular('post') // для пользовательских записей
Первое выражение используется для стандартных записей, а второе - для любых пользовательских типов записей.
Надеюсь, это кому-то поможет.
