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

is_page() WP 1.5

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

Смотрите также похожие функции:

Вернет 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()

✈ 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 ... страница разделенного поста.
}

Код is_page: wp-includes/query.php VER 5.0.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вязанные функции

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

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

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

24 коммента
Вопросы 2 Все
  • Sergey

    Можно вот так просто

    function is_subpage() {
    	global $post;
    	return (bool) $post->post_parent;
    }
    Ответить2 мес назад #
  • Алексей cайт: avtobsk.ru

    Здравствуйте, а как сделать по данной аналогии ссылку "Назад", что бы определялось, есть ли у страницы(или записи) родитель, и формировалась ссылка на родитель. Если нет родителя, то ссылка вела бы на главную. Что то по аналогии хлебных крошек для всех типов записей в вордпресс. Внешний вид везде один - ссылка "Назад"?

    Ответить27 дней назад #
Здравствуйте, !     Войти . Зарегистрироваться