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

is_home() WP 1.5

Условный тег, проверяет показывается ли страница с последними постами, обычно это главная страница сайта.

Этот тег очень похож на is_front_page().

Работа этого тега зависит от настроек параметра Параметры > Чтение > На главной странице отображать (Settings > Reading > Front page displays). По умолчанию, на главной странице выводятся последние записи сайта. По умолчанию, этот тег будет работать для главной страницы сайта, но если изменить настройки и указать для главной странице сайта статическую страницу, а для последних постов указать другую статическую страницу, то этот тег будет работать для страницы где выводятся последние посты и перестанет работать для главной страницы сайта.

На страницах пагинации этот тег будет также срабатывать: /page/2.

✈ 1 раз = 0.00005с = очень быстро | 50000 раз = 0.02с = скорость света

Хуков нет.

Возвращает

true или false.

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

if( is_home() ){
   // код
}

Примеры

#1. Вывод разного содержимого для домашней страницы и внутренних страниц

Например, в сайдбаре, для главной страницы мы хотим вывести одно и в том же сайдбаре для других страниц другое:

if ( is_home() ) {
	echo 'Привет с домашней (главной) страницы посетитель.';
}
else {
	echo 'Привет с внутренней страницы.';
}

#2 Опции «главной страницы» и «страницы записей»

Опции где хранятся ID страниц, который установлены для «главной страницы» и для «страницы записей»:

// ID постоянной страницы, которая указана как главная страница сайта
get_option('page_on_front');

// ID постоянной страницы, которая указана как страница блога (последних записей сайта)
get_option('page_for_posts');

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

<?php
function is_home() {
	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_home();
}

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

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

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

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

is_home 21 комментарий
Полезные 2 Все
  • Василий

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

    <?php  
    if ( is_home() ) {  
    	// Код рекламы 
    } else {  
    	// Код рекламы 
    }  
    ?>

    Как бы я не делал у меня возникает ошибка и с сайдбара все пропадает. Написано типа синтаксическая ошибка. Уже 5 часов бьюсь над этим

    Ответить4.5 года назад #
    • Михаил cайт: f-michail.ru

      Василий, используйте is_front_page()

      Ответить4.5 года назад #
  • Vadyxa @

    Добрый вечер. Хочу сделать так, что бы в списке рубрик (стандартный виджет) на главной странице каждая страница не была закрыта тегами

    <noindex> и </noindex>

    , а если перехожу на другую страницу, то что бы уже была закрыта этими тегами. В файле function.php своего шаблона нашел код отвечающий за вывод рубрик. Сделал вот так:

    <?php 
    if ( is_front_page() ) { 
    
    if ( is_category() ) { 
    
    $this_cat = get_category(get_query_var('cat'), false); 
    
    if ($this_cat->parent != 0) { 
    
    $cats = get_category_parents($this_cat->parent, TRUE, $delimiter);
    
    if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats); 
    
    $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats); 
    
    $cats = str_replace('</a>', '</a>' . $link_after, $cats); 
    
    if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
    
    echo $cats; 
    
    } 
    
    if ($show_current == 1) echo $before . sprintf($text['category'], single_cat_title('', false)) . $after; 
    
    } } else { 
    
    if ( is_category() ) { 
    
    $this_cat = get_category(get_query_var('cat'), false); 
    
    if ($this_cat->parent != 0) { 
    
    $cats = get_category_parents($this_cat->parent, TRUE, $delimiter);
    
    if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats); 
    
    $cats = str_replace('<noindex><a rel="nofollow"', $link_before . '<a' . $link_attr, $cats); 
    
    $cats = str_replace('</a></noindex>', '</a>' . $link_after, $cats); 
    
    if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
    
    echo $cats; 
    
    } 
    
    if ($show_current == 1) echo $before . sprintf($text['category'], single_cat_title('', false)) . $after; 
    } 
    ?>

    Но после этого не грузиться сайт. Просто белая страница.
    Не подскажите в чем может быть ошибка ?

    Ответить4 года назад #
    • Kama4696

      Это что за условия такие вообще?

      if ( is_front_page() ) {   
      
      if ( is_category() ) {   
      
      // ваш код
      
      } }

      Если это главная страница, то проверить, может это страница категории вывести что-то. Получается чтобы был выведен первый код, текущая страница должна быть и главная и страница категории одновременно. Условия друг другу противоречат...

      У вас ошибка синтаксиса, вот так попробуйте:

      $this_cat = get_category(get_query_var('cat'), false); 
      
      if ($this_cat->parent != 0) { 
      	$cats = get_category_parents($this_cat->parent, TRUE, $delimiter);
      
      	if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats); 
      
      	if( is_front_page() ){
      		$cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats);
      		$cats = str_replace('</a>', '</a>' . $link_after, $cats); 
      	}
      	else {
      		$cats = str_replace('<a', $link_before . '<noindex><a' . $link_attr, $cats);
      		$cats = str_replace('</a>', '</a></noindex>' . $link_after, $cats); 
      	}
      
      	$cats = str_replace('</a>', '</a>' . $link_after, $cats); 
      
      	if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
      
      	echo $cats;
      }
      
      if ($show_current == 1) echo $before . sprintf($text['category'], single_cat_title('', false)) . $after;
      Ответить4 года назад #
      • Vadyxa @

        Спасибо, попробовал. Сайт загружается, но ссылки не в тегах ноиндекс(

        Ответить4 года назад #
        • Kama4696

          Ой, там забыл удалить лишнее:
          $cats = str_replace('</a>', '</a>' . $link_after, $cats);

          if( is_front_page() ){  
          		$cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats);  
          		$cats = str_replace('</a>', '</a>' . $link_after, $cats);   
          	}  
          	else {  
          		$cats = str_replace('<a', $link_before . '<noindex><a' . $link_attr, $cats);  
          		$cats = str_replace('</a>', '</a></noindex>' . $link_after, $cats);   
          	}  
          
          	$cats = str_replace('</a>', '</a>' . $link_after, $cats);  // эту строку удалите!
          Ответить4 года назад #
          • Vadyxa @

            Хм, удалил, но ничего не изменилось sad

            Ответить4 года назад #
            • Kama4696

              Должно работать, если это тот код который выводит вообще! Код удаляете вывод удаляется? Попробуйте удалять блоки кода, что-то меняется, найдите проблемное место.

              Ответить4 года назад #
              • Vadyxa @

                Да, Вы правы, этот код не выводит рубрики. Удалил полностью его, а рубрики не удалились со страницы.

                Ответить4 года назад #
              • Vadyxa @

                А Вы не подскажите где и что нужно изменить, что бы сделать так?

                Ответить4 года назад #
                • Kama4696

                  Я не знаю, надо в шаблоне разбираться что там как выводится. У вас наверное виджетами выводится рубрики. В таком случае нужно вывод менять или возможно там хук есть.

                  Ответить4 года назад #
  • Дмитрий1951 cайт: www.youtube.com/c/wpplus

    Пробудую сделать так, чтобы хлебные крошки в шапке на главной странице (а желательно и в рубриках/тегах тоже) не отображались (использую Ваш метод крошек). Код такой делаю:

    <div id="breadcrumbs"><?php
    if ( is_home() ) {
    	// Это основная страница
    } else { <?php kama_breadcrumbs(); ?>
    	// Это не основная страица
    }
    ?></div>

    Но это вызывает белый экран sad

    Ответить3.8 года назад #
    • Kama4696

      У вас синтаксическая ошибка, надо так:

      <div id="breadcrumbs"><?php
      if ( is_home() ) {
      	// Это основная страница
      } else {
      	kama_breadcrumbs();
      	// Это не основная страица
      }
      ?></div>
      Ответить3.8 года назад #
  • День добрый! Позскажите пожалуйста, как сделать, чтобы нужный контент отображался только на первой странице и не отображался на страницах пагинации?

    Ответить2.1 года назад #
  • Tihjawi cайт: natnews.org

    Не могу понять, как следует организовать множественную функцию в случае, если я хочу выводить на всех страницах кроме главной определенный текст.

    так я вывожу на главной:

    <?php
    if(is_home())
      ?>
    ТУТ ТЕКСТ
    <?php endif; ?>

    Все работает, но как мне, заменив is_home на is_page, добавить еще другие is_archive, is_category и так далее. Не понимаю, какой должен быть синтаксис в таком случае.

    Подскажите, пожалуйста.

    Ответитьгод назад #
    • Kama4696
      // ИЛИ 
      if( is_home() || is_archive() )
      
      // И
      if( is_home() && is_archive() )
      Ответитьгод назад #
  • Шамиль

    Подскажите пожалуйста, как вывести заголовок главной - если главная, и заголовок категории - если категория?

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

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