is_page()WP 1.5.0

Проверяет отображается ли страница "постоянной страницы". Можно указать 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()

Работает на основе: WP_Query::is_page()
Основа для: is_shop()
1 раз — 0.000012 сек (очень быстро) | 50000 раз — 0.02 сек (скорость света) | PHP 7.0.8, WP 4.6.1

Хуков нет.

Возвращает

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

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

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

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

Для вложенных страниц можно указать полный путь: parent-page/child-page/. Тогда функция попробует получить страницу через get_page_by_path() и сравнит является ли указанный $page текущей страницей.

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

Примеры

1

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

Если у вас на сайте кириллица не меняется на латиницу - нет плагина Cyr-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('о-сайте') ); // правильно
0

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

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

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

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

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

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

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

// Можно проверять несколько страниц одновременно.
is_page( [ 'sample-page', 'contacts', 'parent-slug/page-name', '/parent-slug/page-name/', 23, 34 ] );
0

#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;
}
0

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

Заметки

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

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

Код is_page() WP 6.7.1

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 );
}
28 комментариев
    Войти