Проблема с использованием функции is_home()
Потратил сегодня пару часов, пытаясь понять, почему функция возвращает значение TRUE даже если открыта не главная страница блога. Путем тестов выяснилось, что за главную страницу считается любая страница, образованная постраничной навигацией (/page/2, /page/3 и т.д.). Если подумать, то это вполне логично для функций типа - ведь при переходе на вторую страницу определенной рубрики сама рубрика остается той же самой. Но ситуация с is_home() совершенно другая - главных страниц в блоге не может быть больше одной. Вероятно для создателей WordPress понятие "main blog page" сродни категории с таким же названием. Обойти проблему оказалось довольно легко, надо вместо кода:
<?php if ( is_home() ) { ?> <h1>Главная страница!</h1> <?php } else { ?> <h1>Это не главная страница!</h1> <?php } ?>
Использовать код:
<?php if ( (is_home())&&!(is_paged()) ) { ?> <h1>Главная страница!</h1> <?php } else { ?> <h1>Это не главная страница!</h1> <?php } ?>
Как вы видите, решение оказалось элементарным. Жаль, что для его поиска пришлось закопаться в форумы поддержки, так как в ничего подобного не нашлось.
Рекомендую также:

#1, 15 сентября, 2008 в 03:33
Привет. В чем практическая польза данного изменения? Это правиться в коде самого движка или в теме?
#2, 15 сентября, 2008 в 03:39
в шаблоне. используется, например, для показа баннеров только на главной странице. или для показа названия блога только на главной. что с обычным использованием is_home невозможно.
#3, 16 сентября, 2008 в 16:15
По терминологии в документации WP корневая страница блога считается главной, просто она может быть "разбита" на множество страниц :) Кстати, про is_paged() в документации - есть.
Но, насколько я понимаю, начиная с версии 2.5 появилась другая функция, позволяющая определить главную страницу - is_front_page()
#4, 18 сентября, 2008 в 05:45
есть, конечно. но не в описании функции is_home. нельзя физически пересмотреть все существующие функции, чтобы найти почему не работает одна единственная.
вы удивитесь, но с этой функцией абсолютно аналогичная проблема - без is_paged она возвращает TRUE не только с главной ))
#5, 18 сентября, 2008 в 18:07
Все-таки рискну предположить, что вы не очень внимательно читали кодекс. В WP конечно специфические понятия и терминология: main page - это непрерывная "лента" постов, на ней находятся все посты от первого до последнего, кроме автономных страниц (pages). Например, перемещаясь на 2-ю, 3-ю страницу вашего блога, пользователь все еще находится на этой "ленте" постов (главной странице), просто со смещением в n постов.
#6, 22 сентября, 2008 в 19:19
Самое железное решение -- использовать вместо (is_home())
т.к. в зависимости от начинки первой страницы варианты могут быть разные, а такое условие сработает всегда.
#7, 18 ноября, 2008 в 04:15
мда что-то с кодом не получилось, попробую еще раз, был такой:
а чтоб работала фунция is_home() нужно такой:
#8, 22 марта, 2009 в 16:23
Спасибо. Сэкономил время мне. Кстати по запросу is_home в яндексе, эта страница первая, так что не зря старался)
А нужно мне это было чтобы сделать разные названия страницам page/2,3 и т.п. и главной.. Чтобы гугля любил, он в webmasters мне это посоветовал сделать, сказав что у страниц одинаковые названия. Теперь бы еще догнать как в название (title) если else выводить разные названия, например добавлять номер страницы.. Если есть идея рабочая - буду рад.
#9, 14 июля, 2009 в 23:44
Спасибо за работающий рецепт (проверено на 2.7) !
#10, 25 июля, 2009 в 10:52
А если быть более точным, то это надо делать вот так:
#11, 16 августа, 2009 в 19:19
Спасибо за подсказку! в моем слкчае именно is_front_page и помогло! все остальное даже не было смысла пробовать :)
#12, 16 августа, 2009 в 19:27
вы не правы - с is_front_page та же проблема, что и с is_home. я об этом уже выше писал.
#13, 16 августа, 2009 в 19:40
Только что установил на сайте под моим ником (посмотрите), там работает именно is_front_page, а до этого также бился с проблемой is_home!
#14, 16 августа, 2009 в 20:02
у вас на главной выводятся не "Ваши последние записи", а "статическая страница"?
просто если на странице все записи не помещаются и появляется постраничная навигация - WP любую такую страницу тоже считает главной. она типа главная, просто разбита на страницы.
#15, 16 августа, 2009 в 20:12
Навигация для главной у меня не предусмотрена, хотя там и выводятся "последние записи". Очевидно, так оно и есть, как вы написали, если главная разбивается на отдельные страницы...
#16, 16 августа, 2009 в 20:17
если нет навигации, то в чем проблема с is_home? ))
#17, 16 августа, 2009 в 20:22
в том то и была проблема, что данная функция у меня не работала
#18, 16 августа, 2009 в 20:45
Вы WP кодекс то читали? Выше посмотрите что я писал, как правильно делать, что бы точно определить главную.
#19, 16 августа, 2009 в 21:02
а зачем лишний код? проверки на &&!(is_paged() имхо вполне достаточно.
#20, 16 августа, 2009 в 21:08
И тут до вас начало доходить... )
#21, 16 августа, 2009 в 21:13
что доходить то? это в статье изначально есть.
а кодекс вещь хорошая, но не все там есть и не всегда.
#22, 9 декабря, 2009 в 10:50
Ребята, не забывайте о том что если у вас главная страница является статической - то есть вывод заданой page в админке, то такое условие работать не будет. Нужно использовать проверку следующего вида:
is_front_page() - работает сто процентно!