WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

is_single() WP 1.5

Проверяет отображается ли страница записи любого типа записей кроме attachment и page. Условный тег.

В первом параметре $post можно «сузить» проверку до конкретного поста или группы конкретных постов.

Если нужно проверить отображается ли запись любого типа, включая attachment и page в одной проверке, используйте is_singular().

Можно указать проверку для записей определенного типа: is_singular( $post_type ).

Работает на основе: WP_Query::is_single()
✈ 1 раз = 0.00003с = очень быстро | 50000 раз = 0.02с = скорость света

Хуков нет.

Возвращает

true/false.

Использование

if( is_single( $post ) ){
	// ... 
}
$post(строка/число/массив)

ID, заголовок или ярлык записи (слаг), для того чтобы выявить конкретный пост.

Можно передать массив из нескольких чисел или строк.

Проверка поста идет в следующем порядке полей: ID, post_title, post_name.

Также, для древовидных записей, можно передать путь: books/my-book в этом случае поиск будет производиться функцией get_page_by_path().

По умолчанию: ''

Примеры

#1. Различные примеры использования:

is_single();
// Когда отображается любая отдельная запись (пост).

is_single(17);
// Сработает только, когда отображается запись с ID 17. Число можно указать строкой "17"

is_single('Музыка Фламенко');
// Сработает для поста с заголовком "Музыка Фламенко".

is_single('musika-flamenko');
// Сработает для поста со слагом "musika-flamenko".

is_single( array(17, 'musika-flamenko', 'Музыка Фламенко') );
// Сработает для подходящих постов. Добавлено в версии 2.5.

is_single('musika/flamenko');
// Сработает для древовидной записи со слагом flamenko, дочерней к записи со слагом musika.

#2 Проверка по ярлыку и кириллица

Если у вас на сайте не установлен плагин транслитерации ярлыков Cyr to Lat enhanced или ему подобный, то при публикации записи, она будет иметь кириллический ярлык преобразованный в кодированные символы, например слово "мой" будет выглядеть так: %D0%BC%D0%BE%D0%B9.

В результате проверка по кириллическому ярлыку работать не будет. Чтобы она работала нужно изменить ярлык с помощью sanitize_title():

is_single('моя-музыка'); // неправильно

is_single( sanitize_title('моя-музыка') ); // правильно

Заметки

  • Смотрите: is_page()
  • Смотрите: is_singular()
  • Global. WP_Query. $wp_query WordPress Query object.

Список изменений

С версии 1.5.0 Введена.

Код is single: wp-includes/query.php WP 5.4.2

<?php
function is_single( $post = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_single( $post );
}

Cвязанные функции

Из метки: Условные теги (типов страниц и запросов)

Еще из метки: Условные теги (все)

Еще из раздела: Запросы

Еще из тегов шаблона: Основные

13 комментов
Полезные 2 Все
  • petrozavodsky795 alkoweb.ru

    а есть ли такой тег что мог проверить нахожусь ли я на странице записи материала с типом news например?

    Ответить10.Дек.2013 15:47 #
    • Kama7750
      if( is_singular('news') ){
      	// Код, который будет работать только на 
      	//отдельных страницах с типом записи news
      }
      2
      Ответить10.Дек.2013 17:26 #
  • Вольдемар

    Здравствуйте!
    Если проверка
    if ( is_single() )
    не срабатывает на странице поста, где стоит смотреть ошибку?

    Ответить14.Дек.2015 05:16 #
  • zgoba zgoba.ru

    А возможно ли задать условие с этим тегом, чтобы выводились (не выводились) записи определенных категорий?

    Ответить19.Фев.2017 16:03 #
  • Есть WP-Recall, личный кабинет которого шорткодом посажен на страницу с ID 12. Делаю в functions.php if (is_single('12')) {код подключения определенного скрипта через add_action}, но скрипт не включается.

    Особенность, пожалуй, в том, что в URL есть параметры ?id=....

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

    Ответить10.Июн.2020 08:43 #
    • campusboy3542 www.youtube.com/c/wpplus

      А это точно не древовидный тип записи? Потому что иначе надо использовать is_page(). А так же ID надо передавать как цифру (иначе как функции отличить ID от slug или заголовка?), а не как строку в Вашем примере, то есть надо писать is_single(12).

      1
      Ответить10.Июн.2020 13:08 #
      • Нет, это тут случайно написал ('12'), в коде писал (12). is_page(12) тоже не помогает, как и is_singular(12).

        Ответить11.Июн.2020 09:06 #
        • campusboy3542 www.youtube.com/c/wpplus

          Тогда приведите весь код, чтобы было понятнее, что не так, как что происходит.

          Также замечу, что если вы в functions.php напрямую делаете проверку, то она не сработает, потому что файл functions.php подключается и выполняется намного раньше, чем устанавливаются данные, на основе которых работает is_single() и аналогичные, поэтому они там всегда возвращают false. Их там надо вызывать на хуке не ниже wp (на нём как раз эти данные заполняются и готовы к использованию), то есть:

          add_action( 'wp', function () {
          	if ( is_single( 12 ) ) {
          		// Делаем что-либо
          	}
          } );
          1
          Ответить11.Июн.2020 12:36 #
          • add_action('wp_enqueue_scripts', 'set_charts_files');
            function set_charts_files() {
              if (is_single(12)) {
              wp_enqueue_script('chart', get_stylesheet_directory_uri() . '/charts/chartist.min.js', 'jquery', false, false );
              wp_enqueue_style( 'chart', get_stylesheet_directory_uri() . '/charts/chartist.min.css', 'style', false, 'all' );
              }
              wp_localize_script('jquery', 'video_anatomy', array(
            	'url' => admin_url( 'admin-ajax.php' ),
            	'nonce' => wp_create_nonce('somenonce'),
              ));
            }

            Спасибо, что помогаете.

            Ответить11.Июн.2020 12:53 #
            • campusboy3542 www.youtube.com/c/wpplus

              Хук wp_enqueue_scripts выполняется достаточно поздно, так что там is_single() будет работать корректно, так что этот код считаю правильным и сам такое делал - работало без проблем. Так что даже и не знаю, что ещё может быть unknw

              Обратите внимание, что зависимости (jquery или style) Вы передаёте как строку, а надо как массив, иначе будут проигнорированы. Вряд ли это причина, но надо поправить.

              А как проверяете, что не работает? Смотрите в исходном коде подключился скрипт или нет? А случаем страничного кеширования нет?

              1
              Ответить11.Июн.2020 13:40 #
              • Зависимость jquery передал массивом, спасибо, а вот попытка передать style как массив приводит к нарушению отображения.

                Проверяю по отображению во фронтенде. При is_single(12) исчезают диаграммы. Плагины кэширования были, но прежде их отключил и еще папку cache почистил.

                Спасибо, буду дальше думать, искать.

                -- UPD --

                Поменял на is_page(12) и заработало.
                Раньше, после вашего совета пробовал is_page несколько раз, не получалось.
                Кривизна рук и никакого мошенничества dash

                Ваша помощь решила проблему.

                Ответить11.Июн.2020 14:01 #