Как проверить, является ли запись пользовательским типом записи?

11 янв. 2011 г., 18:54:26
Просмотры: 402K
Голосов: 142

Я ищу способ проверить, является ли запись пользовательским типом записи. Например, в сайдбаре я могу использовать такой код:

if ( is_single() ) {
    // Код здесь
}

Мне нужен код, который проверяет только пользовательский тип записи.

0
Все ответы на вопрос 8
0
198
if ( is_singular( 'book' ) ) {
    // условный контент/код
}

Вышеприведенное условие возвращает true при просмотре записи пользовательского типа: book.

if ( is_singular( array( 'newspaper', 'book' ) ) ) {
    // условный контент/код
}

Вышеприведенное условие возвращает true при просмотре записи пользовательских типов: newspaper или book.

Эти и другие условные теги можно посмотреть здесь.

12 июн. 2012 г. 19:41:05
4
166

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

11 янв. 2011 г. 19:12:48
Комментарии

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

Rarst Rarst
11 янв. 2011 г. 21:17:51

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

amarinediary amarinediary
26 дек. 2020 г. 22:40:08

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

Rarst Rarst
4 янв. 2021 г. 12:01:05

is_singular() - быстрее... 0.000001 сек. get_post_type() - 0.000637 сек

user3331122 user3331122
22 февр. 2022 г. 08:46:24
3
34

Чтобы проверить, является ли запись любым произвольным типом записи, получите список всех не встроенных типов записей и проверьте, находится ли тип записи в этом списке.

В виде функции:

/**
 * Проверяет, является ли запись произвольным типом записи.
 * @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 'Это произвольный тип записи!';
15 апр. 2013 г. 18:22:25
Комментарии

Это должен быть принятый ответ.

aalaap aalaap
21 мар. 2018 г. 15:33:07

есть идеи как проверить тип записи в панели администратора?

evavienna evavienna
6 мар. 2021 г. 12:24:59

@evavienna Этот код работает везде. Вам просто нужен объект записи.

fuxia fuxia
6 мар. 2021 г. 16:44:16
4
30

Добавьте это в ваш 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')){
    // Творите магию
}
6 июл. 2011 г. 16:41:05
Комментарии

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

User User
21 нояб. 2011 г. 16:23:44

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

turtledropbomb turtledropbomb
13 янв. 2017 г. 15:39:46

is_post_type() является устаревшим.

Lisa Lisa
21 дек. 2017 г. 14:23:08

как мне получить ЧПУ (slug) из get_post_type($wp_query->post->ID), возможно ли сделать что-то вроде get_post_type($wp_query->post->SLUG)

Ice_mank Ice_mank
20 мар. 2022 г. 18:18:03
0
15

Если по какой-либо причине у вас уже есть доступ к глобальной переменной $post, вы можете просто использовать

if ($post->post_type == "ваш_желаемый_тип_записи") {
}
1 февр. 2013 г. 23:30:08
0

Если вы хотите проверить на наличие всех ваших произвольных типов записей:

if( ! is_singular( array('page', 'attachment', 'post') ) ){
    // echo 'Это произвольный тип записи!';
}

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

30 янв. 2014 г. 05:52:59
0

Чтобы легко определить $post_type внутри функции, сначала необходимо вызвать глобальную переменную post, вот пример:

function the_views() {
global $post;

if ($post->post_type == "game") {
   $span = '<span class="fa-gamepad">';
  } else { // Обычный пост
    $span = '<span class="fa-eye">';
  }
}
27 сент. 2021 г. 19:10:29
2

Я ознакомился со всеми ответами, они рабочие, но самый простой способ, который вы можете использовать для проверки, является ли запись стандартной или пользовательской, это:

is_singular('post') // для стандартных записей
!is_singular('post') // для пользовательских записей

Первое выражение используется для стандартных записей, а второе - для любых пользовательских типов записей.

Надеюсь, это кому-то поможет.

2 мар. 2022 г. 17:07:23
Комментарии

Я думаю, что уже есть несколько ответов для is_singular()

Rup Rup
2 мар. 2022 г. 17:33:47

Здравствуйте @Rup, да, это так, но ни один из ответов не описывает, как выбрать нестандартный пост, например -> !is_singular('post') является самым простым решением.

Đođe Sajlović Đođe Sajlović
3 мар. 2022 г. 18:32:08