WordPress как на ладони
wordpress jino

is_singular() WP 2.1

Проверяет просматривает ли пользователь страницу записи (поста, страницы, вложения, произвольны тип записи). Условный тег.

Функция объединяет в себе условные теги: is_single(), is_page(), is_attachment() и произвольные типы записей.

В параметре $post_types, можно указать конкретный тип записи, который нужно проверить.

✈ 1 раз = 0.00005с = очень быстро | 50000 раз = 0.02с = скорость света

Хуков нет.

Возвращает

true или false.

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

if( is_singular($post_types) ){
	// ... 
}
$post_types(строка/массив)
Тип записи или несколько типов записей, которые нужно проверять. Несколько типов записей нужно указывать в массиве.
По умолчанию: нет

Примеры

#1. Вывод содержимого только на отдельных страницах

Таким кодом, можно вывести разные рекламные блоки в сайдбаре для отдельных станиц и страниц отличных от них (архивов).

if ( is_singular() ) {
  // Реклама №1
}
else {
  // Реклама №2
}

#2. Как определить отдельную страницу указанного типа

Этот пример, показывает как определить отдельную страницу указанного типа записи: book

if( is_singular('book') ){
	// Код, который будет работать только на отдельных страницах с типом записи book
}

#3. Определение нескольких типов записей

Пример, показывающий как передавать несколько типов записей в массиве:

if( is_singular( array('newspaper', 'book') ) ){
	// здесь какой-нибудь код 
}

Код is singular: wp-includes/query.php WP 4.8.2

<?php
function is_singular( $post_types = '' ) {
	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_singular( $post_types );
}

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

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

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

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

is_singular 15 комментариев
  • campusboy1848 cайт: wp-plus.ru

    Желаю вот так и белый экран sad в чем может быть проблема?

    <?php 
    if( is_singular( $post_types ) ){
    <?php kama_breadcrumbs(); ?>
    } ?>

    Хочу, чтобы в шапке сайта только на постах были хлебные крошки.

    Ответить3.6 года назад #
  • campusboy1848 cайт: wp-plus.ru

    Тимур, подскажи, почему не работает код?

    function add_to_query_rebus_type($query) {
    	// выходим если это админ-панель
    	if( is_admin() )
    		return;
    
    	if ($query->is_main_query() and is_singular('game-rebus') ){
    		query_posts( array('post_type' => array( 'game-rebus' )) );
    	}
    	 return $query;
    }
    add_action('pre_get_posts', 'add_to_query_rebus_type');

    Возвращает всё равно 404 ошибку. Никак не могу сделать, чтобы отображался произвольный тип записи без редактирования темы.

    1
    Ответить2.2 года назад #
    • campusboy1848 cайт: wp-plus.ru

      В общем, эта приблуда мне не понадобилась. Зашёл в ЧПУ, сохранил и стало по дефолту отображаться. Но почему не заработал код, я так и не понял.

      Ответить2.2 года назад #
    • Kama4464

      Фильтр юзаешь неправильно... http://wp-kama.ru/hook/pre_get_posts

      Ответить2.2 года назад #
      • campusboy1848 cайт: wp-plus.ru

        Прежде чем оставить коммент, я прочёл много инфы и в том числе и ту. Возможно, так и недопонял что к чему.

        function add_to_query_rebus_type($query) {
        	// выходим если это админ-панель
        	if( is_admin() )
        		return;
        
        	if ($query->is_main_query() and $query->is_singular('game-rebus') ){
        		query_posts( array('post_type' => array( 'game-rebus' )) );
        	}
        	 return $query;
        }
        add_action('pre_get_posts', 'add_to_query_rebus_type');

        Так тоже не заработало. В общем, как говорится, не могу поднять ногу smile

        Ответить2.2 года назад #
        • Kama4464

          'pre_get_posts' фильтрует переменные запроса перед самим запросом. А ты во время этого фильтра, делаешь запрос и просто возвращаешь переменные запроса как были. В итоге получается, что перед основным запросом делается твой запрос, затем делается основной и перебивает твой, т.е. как-будто фильтра не было вообще...

          Вот пример как тебе нужно юзать:

          add_action('pre_get_posts', 'add_to_query_rebus_type' );
          function add_to_query_rebus_type( $query ) {
          	// выходим если это админ-панель
          	if( is_admin() ) return;
          
          	if( $query->is_main_query() /* && $query->is_singular('game-rebus') */ ){
          		$query->set( 'post_type', array( 'game-rebus' ) ); // дополняем основной запрос
          	}
          
          	// возвращать не обязательно...
          }

          И еще, я точно не понмю какие там переменные запроса уже установлены, возможно что $query->is_singular('game-rebus') еще не работает.

          Ответить2.2 года назад #
          • campusboy1848 cайт: wp-plus.ru

            Я так делал smile проблема же в том, чтобы откорректировать этот запрос только в том случае, если запись относится к типу "Ребус". А если так прописать, то везде, где используется главный запрос останутся Ребусы, а Посты и Страницы исчезнут. Ведь так?

            Ответить2.2 года назад #
            • Kama4464

              Да! ограничить очень важно!

              А вон я там выложил оказывается что содержит $query: http://wp-kama.ru/hook/pre_get_posts

              Тогда чтобы ограничиться нужно так:

              add_action('pre_get_posts', 'add_to_query_rebus_type' );
              function add_to_query_rebus_type( $query ) {
              	// выходим если это админ-панель
              	if( is_admin() ) return;
              	if( defined('DOING_AJAX') ) return;
              
              	if( $query->is_main_query() && $query->is_singular && $query->query_vars['post_type'] == 'game-rebus' ){
              		//$query->set('post_type', array( 'game-rebus' ) ); // дополняем основной запрос
              		$query->set('posts_per_page', -1 );
              	}
              
              	// возвращать не обязательно...
              }
              Ответить2.2 года назад #
              • campusboy1848 cайт: wp-plus.ru

                Вот, то что нужно! Спасибо большое. Я ходил рядом да около, заглядывал же в этот query_vars, но так как опыта особого с ООП нет, то не смог правильно выстроить цепочку до post_type. Сейчас буду с AJAX теперь разбираться. Жаль, мало у тебя материала очень на эту тему sad

                Ответить2.2 года назад #
                • Kama4464

                  Кстати про AJAX там в функцию поставь еще проверку обязательно: if( defined('DOING_AJAX') ) return;

                  А то при аякс запросах разные глюки случаются...

                  П.С. готовый результат выложи плз, добавлю как пример к pre_get_posts

                  1
                  Ответить2.2 года назад #
                  • campusboy1848 cайт: wp-plus.ru

                    Спасибо, покурю эту тему! Но мне надо лишь чтобы ребенок ввел ответ на ребус и AJAX стрельнул в произвольно поле. Ну и вернул, правильно или нет, плюс если верно - начислил баллы дитю. Видел у тебя была статью про AJAX, буду на её основе делать + поковыряю плагин wp-postratings, думается мне что там тоже найду ответы, как подобное сделать. При AJAX ещё используют wp_create_nonce. Не пойму пока для чего он нужен, для каких-то проверок.

                    Ответить2.2 года назад #
                  • campusboy1848 cайт: wp-plus.ru

                    Кстати, что у тебя с поиском? Перестала форма работать как раньше (живой поиск) + стили у ней посбивались. Что-то последнее время аномалии на сайте smileЭкспериментируешь

                    Ответить2.2 года назад #
                    • Kama4464

                      Прикручивал вчера туда крестик... Щас вроде все работает... Возможно еще кэш как-то сказался... Не помню обновлял его или нет.

                      Ответить2.2 года назад #

Здравствуйте, !

Ваш комментарий