Янв
11
119

Вывод текста в блоге только на главной

Условные операторы wordpressСтандартный формат блога построен таким образом, что его сообщения (посты) выводятся друг за другом, причем первыми отображаются самые новые, а старые постепенно уходят в архив. Так было в самого начала, но с развитием блоггинга мы могли видеть множество различных вариантов шаблонов wordpress, которые, например, отображают информацию в газетном виде, а сверху демонстрируются так называемые featured (избранные) статьи. Или, например, фото блоги, что практически не содержат текстовой информации, лишь фото, ну и т.п.. Люди понемногу стали отходить от стандартов. И это здорово.

Одним из таких моментов, что может слегка разнообразить ваш блог, есть вывод определенного текста на главной странице блога. То есть читатель заходит на проект site.ru и видит небольшое текстовое описание, о чем собственно сайт, что здесь можно найти и т.п. Иногда такие описания (вступления) помещаются в сайдбар, иногда в шапку блога. Можно поступить несколько иным образом, скомбинировав два варианта:

  • на главной отображается текстовый блок с вступлением;
  • на всех остальных страницах описание блога выводится в сайдбаре, но в уменьшенном (более компактном виде).

Пример можно глянуть в блоге про чай. Я там по дизайну еще не все делал, но как раз сегодня разбирался с выводом текста на главную. Получается, что многие посты на WordPress Inside основаны на личном опыте:)

Кстати, если вам нужно подправить лишь оформление главной, то достаточно будет использовать WordPress функцию body_class — она добавит в body соответствующие классы, а дальше вы примените CSS стили.

Условные операторы wordpress

Для решения нашей задачи мы будем использовать условные операторы wordpress. Но тут есть небольшая «неувязочка», которую раскусить пока не удалось, хотя на финальный результат она не влияет. Фишка в том, что для определения главной страницы блога есть сразу 2 оператора — is_home() и is_front_page(). По описанию в кодексе мне лично до конца и не удалось понять какая между ними разница, термины одинаковые какие-то, поэтому просто практически нашел работающий вариант.

is_home() – условный оператор, который равен TRUE или FALSE и проверяет отображается ли в данный момент «main page» для блога. Сказано еще, что в WordPress 2.1 функция обрабатывается несколько иначе, чем в других версиях и, если выбрана статическая страница в качестве главной, то там могут возникнуть проблемы.

is_front_page() – добавлена в версии 2.5, также является условной, принимает значение TRUE или FALSE в зависимости от того отображается ли в данный момент «front» страница или пост. То есть, судя по всему, функция универсальная и срабатывает в обеих случаях – когда у вас в админке выбрано «отображать последние записи на главной» либо в качестве главной идет «статическая страница».

Если меня читают гуру wordpress, которые разбираются во всех тонкостях системы, то буду признателен за разъяснение. Но пока что могу сказать, что я использую у себя is_front_page() и никаких проблем не наблюдал. На главной при этом выводятся «последние посты». Получаем что-то вроде:

<?php
if (is_front_page() ) {
   echo('This is a homepage'); // действие для главной страницы
} else {
   echo('This is not a homepage'); // действие для не главной страницы
}
?>

В блогах бывают ситуации, когда на главной странице не помещаются все посты и внизу появляется разбиение на страницы. Что важно(!) система wordpress при переходе по ним не меняет состояние страницы с «главной» на другое — получается главная страница, которая просто не помещается за один раз. Поэтому мы будем использовать еще один важный условный оператор:

is_paged() —  реагирует (TRUE или FALSE) на ситуацию, когда все посты архива (для главной, категории, тегов) не помещаются на одной странице и разбиваются на несколько. Причем следует заметить, что это не касается разбиения отдельного поста на страницы с помощью <!--nextpage-->.

Итого — выводим текст только на главной

Чтобы выводить текст на главной и прятать его на любых других страницах я использую код, который добавляю в файл шаблона index.php до выборки последних постов блога have_posts():

<?php if ((is_front_page()) and (!is_paged())) { ?>
 <div class="pagetitle"><h1>Мой блог</h1></div>
 <div class="entry"><p>Добро пожаловать в мой новый блог</p></div> 
<?php } ?>

Теперь шаг номер 2 – будем выводить небольшое краткое описание для блога в сайдбаре – для этого открываем файл sidebar.php и добавляем в нужное нам место строки:

<?php if ((!is_page('2')) and !((is_front_page()) and (!is_paged()))) { ?>
 <div class="about" style="margin-bottom: 5px;">
  <div class="h3title">О проекте</div> <p>Короткое описание</p>
 </div>  
<?php } ?>

Здесь мы видим еще один условный оператор, который может кому-то пригодиться.

is_page (‘ID’) – проверяет отображение страницы с номером, указанным в ID. В моем примере я скрываю краткое описание блога в сайдбаре на странице с id 2, потому что там у меня приготовлена целая статья «о проекте». То есть нет смысла выводить краткое описание, когда все рассказывается непосредственно в блоке контента.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 11, средний балл: 6,82 из 7)
Загрузка...

категория Категории: Возможности; Хаки и секреты;
теги Теги: , , , , , .

комментариев 119 к статье “Вывод текста в блоге только на главной”

  • Eremkin   15.01.2010

    Реально полезная статья! Спасибо )
    Была подобная необходимость, так попросил знакомого эту проблему решить. Он написал целую кучу кода, которая сверяла URL страницы, и если он совпадал с адресом главной, то выводился этот самый блок)))

  • quizz   23.01.2010

    Не подскажете, как вывести определенный текст только (!) на первой странице категории? но только на первой странице категории, иначе опять дублирующийся контент.

  • Tod   23.01.2010

    quizz, используешь is_paged точно также как это делаем с главной. Например:

    <?php if ((is_category()) and (!is_paged())) { ?>
    // тут идет нужный код
    <?php } ?>
  • Валерий   09.02.2010

    Как всегда — полезна, четко и тема раскрыта полностью.

  • mix86   06.03.2010

    Я конечно не гуру WP, но у меня есть пара слов о is_home и is_front_page.
    Если главная страница и есть список постов(так оно и есть в большинстве случаев) то функции эквивалентны, если же это не так то:
    is_home() возвращает true когда запрашивается страница с постами. Должа она при этом быть главной или нет не заю – не проверял.

    is_front_page() – возвращает true когда запрашивается главная страница.

    а за статью спасибо. помогла.

  • Iren   16.03.2010

    Это работает!!)) И так просто! До этого весь шаблон слетал от подобных попыток. Спасибо!

  • Iren   16.03.2010

    А с категориями не получилось ничего..
    Код
    инфо
    Добро пожаловать
    — ничего не отображается. В чём может быть проблема?

  • Вячеслав   10.05.2010

    Вопрос.
    Например у меня работает парсер, записывает в свои переменные $thumb, $title, и $description, как сделать так чтобы полученный текст из $description не отображался на главной странице а был показан только при переходе на домашнюю страничку поста?

  • Serge   26.07.2010

    А куда текст-то для главной записывать, сюда:
    Добро пожаловать в мой новый блог
    вместо Добро пожаловать в мой новый блог ??
    А если хочется навороченый блок, со скриптами, таб., и картинками — то как — сюда же — скодом шаманить?
    А есть где-то плагин — чтоб сделать отд. пост, отладить его в редакторе и опупликовать только на главной, вверху, внизу — по выбору?

  • Tod   27.07.2010

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

  • cikave   12.08.2010

    Респект автору! Завдяки зрозумілому тексту в мене відразу все вийшло ! Дякую. ))))))

  • RodgerFox   25.08.2010

    Подскажите а как вывести текст в лупе для опрд. категории, т.е. вот у нас список постов из опр.категории нажимаю на него выводится полный текст, но при это под ним ещё доп элементы и только для категории в которой этот пост, я исп для всех стр.( вывод одного поста single.php)

  • Tod   25.08.2010

    RodgerFox, частично, а возможно и полностью ответ на твой вопрос есть в статье добавляем текст описания в категории wordpress блога — там разбирал подобную ситуацию.

  • vizavi   26.09.2010

    Подскажите, как закрепить определенные посты на главной (именно кодом, а не выставлением галочки «Прилепить на главную страницу»). Надо, чтобы 3 поста были постоянно на главной, а остальные обновлялись.

  • Tod   28.09.2010

    vizavi, что-то похожее я уже рассматривал — список последних сообщений выбранной категории — может помочь.

  • vizavi   28.09.2010

    Tod, спасибо за ответ! Но мне нужно выводить посты не определенной категории, а из разных категорий, и не в сайдбаре, а как говорится, в таймлайне, т.е. в основном поле на главной. Может я чего-то не понял, объясните плиз. Скажем, например, мне нужно вывести на главную посты с ID=3,19,25 и при это все они из разных категорий. А все остальные, которые идут ниже, должны быть динамическими.

  • Tod   28.09.2010

    vizavi, в той статье есть пример когда, где выбираются статьи по категории, посмотри что можно сделать с теми же функциями, но для постов. Ну и вместо сайдбара засунуть это в основной index.php. Я понял о чем речь, просто скинул ссылку на похожу ситуацию, додумать ее придется самому:)

  • Саша   30.09.2010

    Хорошая полезная статья. Есть вопрос по добавлению else следующего блока. Что то криво получается. Спасибо автору

  • RodgerFox   12.10.2010

    подскажите а как сделать так, если есть миниатюра ( которая создаётся вместе с постом, то выводится она, если нету то выводится картинка первая в посте.) Большое спасибо

  • Елена   16.12.2010

    Полезный пост, вот у меня возник вопрос, я пыталась сделать страницу с контактами у себя на блоге, страница получилась но только на ней отображаются не только контакты а ещё и карта сайта теперь лезет на все вновь созданные страницы, может быть я не туда код вставила когда карту сайта делала, подскажите если не в лом.
    Спасибо.

  • Tod   18.12.2010

    Елена, скорее всего добавили карту сайта в шаблон page.php если она на страницах выводится.

  • Елена   18.12.2010

    Да именно туда, а куда нужно в index php, мне кажется что и после этого тоже будет отражаться на всех страницах.

  • Romero   21.12.2010

    Подскажите, никак не разберусь, как вывести статичную страницу на главную без её дублирования в «шапке». В настройках чтения в админке WordPress 2.9.2 выставляю «Постоянная страница» для отображения на главной. Эта страница, условно называющаяся «О сайте» выходит на главную, но при этом «Главная» остается в шапке (при нажатии, соотв-но, происходит редирект на «О сайте»).
    Хочу вот эту «Главную» удалить из шапки, оставив только «О сайте». Какие-то изменения надо вносить в header.php? Какие?

  • Romero   21.12.2010

    …Всё понял, поправил index.php, как описано выше.

  • максимко   16.03.2011

    здраствуйте.
    Можете подсказать, как сделать следующие.
    Возьмем к примеру дефаультный шаблон.
    Нужно что бы на главной, выводилось описание главной страницы. А на страничках постов, выводилось описание самой статьи, которое можно заполнять самому, не прибегая к помощи «all in seo».
    Я имею мало опыта с вп, т.к работал в основном с дле.

    Приходят только мысли о дополнительных полях, но как именно написать код, на описание главной на главной, echo страничка поста — доп поле =\

  • Tod   16.03.2011

    Максимко, можно использовать так называемые произвольные поля custom fields — для отдельных постов именно то, что нужно.

  • максимко   16.03.2011

    Спасибо, я и имел в виду произвольные поля, только сейча это понял, Спасибо за поправку)
    Но главная страничка статическая, и остается открытым вопросик, как именно выводить сообщение о блоге, в файле header.php
    Пробовал ваш код немного изменив описание.

    if ((is_front_page()) and (!is_paged())) { ?>
    Добро пожаловать в мой новый блог333

  • Tod   16.03.2011

    максимко, приведенный код в статье на 100% рабочий, его нужно и использовать, но добавлять в index.php, не header.php.

  • Валерий   30.03.2011

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

    Попробовал Ваш код, но он работает на моем блоге не совсем так, как бы хотелось.
    Дело в том, что я использую в сайдбаре большой текстовый блок (около 4000 символов).
    Блок этот мне нужен хотя бы потому, что без него тема начинает смотреться «не айс», а
    тему менять не хочется.

    В тоже время создалась неприятная ситуация с наложением на мой блог фильтра АГС Яндекса:
    получается что текстовый блок сквозной, большой, СЕО нашпигованный и он является частью
    каждой страницы (об таком эффекте я как-то не задумывался), даже старниц меток, рубрик и т.д.
    Причем на этих страниц он составляет более 50% текстовой информации. Видимо из-за такой
    «бяки» я на АГС и нарвался… :(

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

  • StanKoba   01.04.2011

    Прошу прощение за ламерский вопрос, но подскажите, как теперь отформатировать текст (по ширине колонке, цвету, шрифту, кеглю и т.д.)? Понятно, что надо писать в style.css для этого, но не понятно как связать инф. в index.php со стилем в style.css. Спасибо!

Оставить комментарий

(предыдущая статья)

Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости