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 Функция в действии
Различные примеры использования - случаи когда функция возвращает 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 ] );
#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_single()
- Смотрите: is_singular()
- Global. WP_Query. $wp_query WordPress Query object.
Список изменений
С версии 1.5.0 | Введена. |
Код is_page() 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 ); }