is_page()
Проверяет отображается ли страница "постоянной страницы". Можно указать 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()
Хуков нет.
Возвращает
true|false. true, если отображается тип страницы: постоянной страницы и false, если отображается любой другой тип страницы.
Использование
if( is_page( $page ) ){
//код
}
- $page(строка/число/объект/массив)
ID, ярлык, заголовок страницы, которую нужно проверить. Можно указать массив из любых этих значений, чтобы выставить на проверку несколько разных страниц.
Для вложенных страниц можно указать полный путь:
parent-page/child-page/. Тогда функция попробует получить страницу через get_page_by_path() и сравнит является ли указанный $page текущей страницей.По умолчанию: ''
Примеры
#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('о-сайте') ); // правильно #2 Проверка находимся ли мы на дочерней странице у постоянной страницы
В 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;
} #3 Функция в действии
Различные примеры использования - случаи когда функция возвращает 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 ] ); #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_single()
- Смотрите: is_singular()
- Global. WP_Query.
$wp_queryWordPress Query object.
Список изменений
| С версии 1.5.0 | Введена. |
Код is_page() is page WP 7.0
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 );
}