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

is_page() WP 1.5

Проверяет отображается ли страница "постоянной страницы". Можно указать ID, ярлык или заголовок страницы для проверки. Условный тег.

✈ 1 раз = 0.000012с = очень быстро | 50000 раз = 0.02с = скорость света PHP 7.0.8, WP 4.6.1

Хуков нет.

Возвращает

true/false. true, если отображается тип страницы: постоянной страницы и false, если отображается любой другой тип страницы.

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

if( is_page( $page ) ){
	 //код
}
$page(строка/число/объект)

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

По умолчанию: нет

Примеры

#1 Функция в действии

Различные примеры использования - случаи когда функция возвращает true (срабатывает):

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

is_page(42);
// когда отображается страница с ID 42.

is_page('О сайте');
// Когда отображается страница с заголовком "О сайте".

is_page('o-saite');
// Когда отображается страница со слагом "o-saite".

is_page( array(42, 'o-saite', 'О сайте') );
// Параметры можно комбинировать. Добавлено в версии 2.5.

is_page( array('sample-page', 'contacts', 23, 34) );
// Можно проверять несколько страниц одновременно. Все указанные страницы разные...

#2 Заметка про кириллицу и ярлык (слаг)

Если у вас на сайте кириллица не меняется на латиницу - нет плагина Сry to Lat или ему подобного, то при создании записи её ярлык изменяется и кириллица превращается в спец символы (контакты - %d0%ba%d0%be%d0%bd%d1%82%d0%b0%d0%ba%d1%82%d1%8b), поэтому при проверке нужно это учитывать. Т.е. если проверяется не заголовок, а ярлык (post_name), то делайте так:

is_page('о-сайте'); // неправильно

is_page( sanitize_title('о-сайте') ); // правильно

#3 Проверка находимся ли мы на дочерней странице у постоянной страницы

В WordPress нет функции is_subpage(). Но такую проверку можно сделать таким кодом:

Пример 1

global $post;     // Если за пределами цикла

if ( is_page() && $post->post_parent ) {
	// Это дочерняя страница

} else {
	// Это не дочерняя страница
}

Пример 2

Можно создать свою функцию is_subpage(). Добавьте такой код в файл темы functions.php. Она работает как же как первый пример: проверят является ли текущая страница дочерней, т.е. есть проверяешь страница ли это вообще и есть ли у нее родительская страница.

Такую функцию полезно создавать, когда на сайте предполагается делать проверки как в примере 1 много раз.

/*
 * Проверят является ли текущая постоянная страница дочерней страницей
 * Возвращает true или false
 */
function is_subpage() {
	global $post;

	if ( is_page() && $post->post_parent ) {
		return $post->post_parent;
	} 
	return false;
}

Пример 3

Чтобы определить страницу "О сайте" или её дочернюю страницу, используйте этот пример. Этот пример может пригодится, когда нужно указать переменную для всей ветки страниц. Здесь мы укажем картинку для ветки:

if ( is_page( 'about' ) || '2' == $post->post_parent ) {    
	// Это страница "О сайте" или её дочерняя страница
	$bannerimg = 'about.jpg';

}
elseif ( is_page( 'learning' ) || '56' == $post->post_parent ) {    
	$bannerimg = 'teaching.jpg';

}
elseif ( is_page( 'admissions' ) || '15' == $post->post_parent ) { 
	$bannerimg = 'admissions.jpg';

}
else { 
	$bannerimg = 'home.jpg'; // если мы на неопределенной странице, выведем картинку по умолчанию
}

Пример 4

Создадим функцию, которая проверит все уровни вложенности, всю ветку подстраниц и если мы на одной из страниц ветки, то функция вернет true, в противном случае false. Т.е. предположим у нас есть страница "О нас" у нее есть дочерняя страница "Наши услуги", а у этой страницы есть еще дочерние страницы "Покраска" и "Отделка". В эту функцию передадим ID страницы "О нас" и она будет возвращать true если мы находимся на любой из указанных страниц:

/*
 * Проверка дочерних страниц по всем уровням вложенности
 * $pid = ID страницы все уровни дочерних страниц которой нужно проверить
 */
function is_tree( $pid ){
	global $post;

	// если мы уже на указанной странице выходим
	if ( is_page( $pid ) )
		return true;

	$anc = get_post_ancestors( $post->ID );
	foreach ( $anc as $ancestor ) {
		if( is_page() && $ancestor == $pid ) {
			return true;
		}
	}

	return false;
}

#4 Проверка разделения страницы

В записях можно использовать шоткод <!--nextpage-->. Такой код будет делить текст записи на несколько страниц. Это полезно, когда вам нужно вывести метаданные только на первой странице, разделенной на несколько страниц записи.

Пример 1

$paged = $wp_query->get( 'paged' );

if ( ! $paged || $paged < 2 ){
	// Пост не разделен на страницы или это не первая страница.
}
else {
	// Это 2,3,4 ... страница разделенного поста.
}

Пример 2

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : false;
if ( $paged === false ){
	// Пост не разделен на страницы или это не первая страница.
}
else {
	// Это 2,3,4 ... страница разделенного поста.

}

Пример 3

if ( 0 === get_query_var( 'page' ) ) {
	// Пост не разделен на страницы или это не первая страница.
}
else {
	// Это 2,3,4 ... страница разделенного поста.
}

Заметки

Возвращает true при передаче пустых значений

Будьте внимательны, потому что следующие вызовы этой функции вернут true:

is_page( '' )
is_page( 0 )
is_page( '0' )
is_page( null )
is_page( false )
is_page( array() )

Нельзя использовать внутри Цикла WordPress

Из-за того что в при работе цикла переписываются некоторые глобальные переменные, is_page() не получится использовать внутри цикла. Впрочем, в этом нет необходимости. Чтобы использовать этот Тег шаблона после цикла, произвольный цикл (запрос на получение записей) надо сбросить функцией: wp_reset_query()

Код is page: wp-includes/query.php VER 4.9.1

<?php
function is_page( $page = '' ) {
	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_page( $page );
}

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

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

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

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

is_page 36 комментариев
Вопросы 1 Все
  • avense5 cайт: videovegas.ru

    Как и с помощью какого хука лучше всего проверить is_page(ID) из файла теми functions.php ?

  • yaleks cайт: alexanderyurchenko.ru @

    Приветствую!
    Вопрос следующий: Начал натягивать html шаблон и решил добавить настроек будущей теме (использую OptionTree) и столкнулся с следующем косяком, с помощью кода:

                    <?php if ( is_front_page() && is_home() ) { ?>
    					<?php if ( ot_get_option( 'logo_upload' ) ) { ?>
    						<h1 class="brand_name"><img src="<?php echo ot_get_option( 'logo_upload' ) ?>" alt=""></h1>
    					<?php } else { ?>
    						<h1 class="brand_name"><?php bloginfo( 'name' ) ?></h1>
    					<?php } ?>
    				<?php } else { ?>
    					<div class="brand_name"><a href="<?php echo home_url() ?>"><?php bloginfo( 'name' ) ?></a></div>
    				<?php } ?>

    Реализовал замену текстового названия сайта на логотип (картинка предварительно выбирается в админке), с главной все работает отлично, но стоит перейти на другие разделы сайта (по пунктам меню или открыть любую запись), логотип опять меняется на текстовое название сайта...возвращаешься на главную и на месте текстового названия вновь логотип.
    Не подскажите, как сделать, что бы всегда был логотип (если естественно выбрана картинка в админке в соответствующем пункте)?

    Ответить4 месяца назад #
    • Разраб cайт: danielhaus.kz

      Удали условие : "if ( is_front_page() && is_home() ) {"

      1
      Ответить4 месяца назад #
  • Елена @

    а можно задать, только для дочерних страниц, следующая/предыдущая, чтобы не ссылки были только "внутри" дочерних страниц, определенной страницы? отдельный шаблон не выход, так как следующая ведет на след страницу, а не пропадает или на первую дочернюю

    3
    Ответить3 месяца назад #
  • Спецтехник cайт: pogruzovik.ru/rent/location/moscow_regio...

    Здравствуйте!
    Как вывести баннер на странице поисковых результатов? Это не таксономия, не страница и не запись. Вот пример такой страницы http://pogruzovik.ru/rent-cat_kompaktnaya-tehnika&location_moscow_region/

    Наверное нужно сделать проверку на url? Можете показать как это сделать?

    Ответить18 дней назад #

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

Ваш комментарий
Предпросмотр