Янв
11
119

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

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

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

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

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

Условные операторы 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 к статье “Вывод текста в блоге только на главной”

  • Tod   27.03.2015

    Михаил, код привести целиком и полностью я не смогу. Распишу лишь логику. Открываете файл главной index.php или home.php ищите там цикл вывода постов if (have_posts()) : while (have_posts()) : the_post(). Перед циклом добавляете новую переменную $count = 0, потом добавляете условие IF если count == 0 то выводить the_content иначе the_excerpt(). после этой конструкции увеличиваете значение $count++;
    Подсмотреть синтаксис IF можно в инете, там есть примеры кода. Суть в том, что при проверке значение count сначала будет 0 и отобразится весь пост, а на второй заход цикла оно уже увеличится, поэтому будет отображаться excerpt.

  • Сергей   01.05.2015

    Спасибо за статью! Очень подробно все описано, применил, работает. Сейчас буду искать как добавить уникальный анонс к каждой отдельно категории. Может есть какая инфа?

  • Юрец   11.06.2015

    Большое спасибо, всё внятно и понятно! Я так себе поиск на главной странице реализовал)

  • Александр   15.07.2015

    Огромное спасибо, реализовал то что надо.

  • Алексей   27.11.2015

    Подскажите как можно вывести описание разделив его на две части Первая часть в начале страницы затем идут анонсы затем вторая часть описания

  • Tod   27.11.2015

    Алексей, если прописывать описание главной страницы через шаблон, то ваша задача — не проблема. Создаете 2 текстовых блока в index.php/home.php до и после вывода анонсов блога — перед if have_posts и после endwhile.

  • Алексей   27.11.2015

    я так и делаю в файле index.php создаю два текстовых блока только вот тот что идет после анонсов выводится на всех страницах page Мне бы хотелось чтобы только на главной

  • Tod   27.11.2015

    Алексей, используйте дополнительно условие !is_paged (как в последнем и предпоследнем примерах) дабы тексты отображались только на главной.

  • Алексей   27.11.2015

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

  • Алексей   27.11.2015

    Переставил восклицательный знак в вашем примере и всё получилось

  • Максим   04.12.2015

    А как убрать блок только с главной страницы, оставив его на всех остальных? У меня 2 верхних меню, одно из которых на главной лишнее.

  • Tod   04.12.2015

    Максим, использовать «оператор отрицания» условия — «!», то есть добавить в конструкцию !is_front_page().

  • Максим   04.12.2015

    Я добавил. функция «if (!is_front_page()){Код меню}» убрала текст из контейнера с меню, но сам контейнер остался. Как быть?
    Перед кодом с меню у меня идет . Вот этот сам navcontainer у меня остался. Как его убрать, подскажите чайнику ))
    И теперь у меня висит на главной пустой блок)))

  • Tod   04.12.2015

    Максим, добавляйте контейнер внутрь условия if, если не хотите чтобы он отображался на главной.

  • Максим   04.12.2015

    Куда переставить функцию? Вот смотрите:

    <li ><a href="» rel="nofollow">Главная

    не вставляется код… когда условие if ставлю перед блоком div id=»navcontainer» сайт не отображается

  • Tod   04.12.2015

    Максим, вы должны не просто переместить условие IF, а весь блок меню разместить внутри его — IF { DIV navcontainer …. код меню … закрытие DIV }. Если после правки кода сайт не отображается, то где-то допущена ошибка.

  • Елена   12.12.2015

    Спасибо, все работает. Можно вопрос не по теме статьи?

  • Tod   13.12.2015

    Елена, пишите вопрос на почту stod84@gmail.com.

  • xxxvitos   25.12.2015

    Человеческое спасибо. До этого у меня код был ‘погрузнее’. Реально очень помогли.

  • organ2   15.01.2016

    Здравствуйте. Нужна помощь. Использую woocommerce и возникла проблема с правым сайтбаром. Когда показываются категории товаров правый сайтбар с фильтрами не появляется, но как я кликаю по категории и перехожу в подкатегории — правый сайтбар появляется. Как его можно скрыть на страницах подкатегорий? Спасибо.

  • Tod   16.01.2016

    organ2, судя по всему, это зависит от вашего шаблона — нужно искать в настройках темы или же править код в ее файлах.

  • Елена   19.10.2016

    Спасибо, на главной получилось. Как можно вывести текст на произвольной странице WP?

  • Tod   19.10.2016

    Елена, в вордпресс есть разные условные операторы, например для страницы — is_page, для поста — is_single. Можете погуглить и найти готовые примеры применения функций из codex.wordpress.org.

  • Елена   19.10.2016

    Спасибо, уже сама разобралась:

  • Николай   12.11.2016

    Здравствуйте. Возникла с проблемой вывода главной статистической страницы. Она не выводится. Выводится пост на главную, а страница нет. Где-то глюки в шаблоне. Подскажите, где поковырять, чтобы вывести главную статистическую страницу?

  • Bars   22.11.2016

    Здравствуйте! А можно как-то настроить отображение анонсов в рубриках так, чтобы старые статьи оставались на первых страницах, а новые уходили в архив?

  • Tod   22.11.2016

    Bars, обычно, конечно, в блогах так не принято, но что-то подобное можно реализовать если добавить параметры в query_posts для цикла (loop).

  • Woot   17.05.2017

    Подскажите как сделать редирект на странице сайта , после условия появления определённого класса на странице.
    Коротко: есть форма обратной связи, после заполнения появляется надпись спасибо, хотелось бы сделать редирект если эта надпись появляется, она имеет свой Div.

  • Tod   17.05.2017

    Woot, я бы подправил код модуля, который выводит форму. Если там уже выводится сообщение «спасибо», то где-то в этом же месте кода попробовал бы добавить редирект. Либо, если это популярный модуль (contact form7, к примеру), поискал бы плагины, которые реализуют такую задачу. Конкретного ничего не посоветую, т.к. с подобным не сталкивался, хотя в сети видел статьи что-то вроде wordpress redirect after submit form.

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

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

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

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

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

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

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

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