Я видел много сайтов на WordPress, у которых на главной странице отображается какая-нибудь статичная страница, а страница блога находится отдельно, например yourwebsite.com/blog
.
Как же это реализовать на своём собственной сайте? На самом деле существует два способа — один простой и один не очень, рассмотрим их оба.
Это стандартный способ, предусмотренный в WordPress. Скорее всего на тех сайтах, про которые я говорил в самом начале поста, используется именно он. Рассмотрим пошагово.
Кстати, так как в разных темах содержимое файла index.php
разное — оно может быть совсем не предназначено для блога, в таких случаях либо меняем сами свой index.php
либо воспользуемся вторым способом, который я описал чуть ниже.
Ну, что тут сказать, переходим в Страницы > Добавить новую, указываем какой-нибудь заголовок, например Блог и какой-нибудь URL, например blog, после этого сохраняем. Всё, с шагом 1 покончено.
Переходим в Параметры > Чтение, настраиваем отображение нужной страницы на главной, а для страницы записей устанавливаем созданную в предыдущем шаге.
Уже после завершения второго шага при переходе по адресу блога (у нас это yourwebsite.com/blog
), у вас будет отображаться страница с записями, использующая шаблон файла index.php
.
Тем не менее можно также добавить эту страницу в меню сайта (если поддерживается темой разумеется). Для этого переходим в Внешний вид > Меню, слева в колонке выбираем нашу страницу блога и нажимаем кнопку «Добавить в меню»
Этот способ позволяет создавать страницы блога, используя свой собственный шаблон. Этот способ отлично подходит, если вам требуется изменить параметры вывода постов. Можно создавать разные страницы с разными параметрами вывода.
Шагов будет чуть побольше и они будут немного позаковырестей, чем в предыдущем методе. Итак, поехали.
Открываем папку с темой и создаем там файл произвольного названия, например blog-template.php
. Внутрь файла вставляем:
<?php /* * Template name: Блог */
Этот шаг аналогичен первому шагу из начала поста. Итак, переходим в Страницы > Добавить новую, придумываем название и URL странице, и кроме всего прочего в атрибутах страницы указываем только что созданный нами шаблон.
Сохраняем.
Однозначно, что нам понадобится постраничная навигация. Скорее всего у вас уже используется какой-то плагин или функция навигации. Если же навигация не будет работать, рекомендую поставить WP_PageNavi — этот плагин работает отлично, я его протестировал, всё ок.
Это голый шаблон блога, без таких важных функций как get_header(), get_footer() и прочего. Просто в данный момент важно понять саму суть.
<?php /* * Template name: Блог */ $current_page = (get_query_var('paged')) ? get_query_var('paged') : 1; // определяем текущую страницу блога $args = array( 'posts_per_page' => get_option('posts_per_page'), // значение по умолчанию берётся из настроек, но вы можете использовать и собственное 'paged' => $current_page // текущая страница ); query_posts( $args ); $wp_query->is_archive = true; $wp_query->is_home = false; while(have_posts()): the_post(); ?> <h2><?php the_title() /* заголовок */ ?></h2> <p><?php the_content() /* содержимое поста */ ?></p> <?php endwhile; if( function_exists('wp_pagenavi') ) wp_pagenavi(); // функция постраничной навигации
Всё, страница блога создана, вы можете таким образом создать различные страницы блогов с разными параметрами массива $args. Полный список параметров здесь.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Здравствуйте Миша. Спасибо за статью, очень интересно. У меня сразу 2 вопроса.
1.Если проделать все выше сказанное вами, то придется менять чпу, скажем было:
http://sait.ru/category/какой-то_пост.html
на http://sait.ru/blog/category/какой-то_пост.html , ну чтобы логика не потерялась, соответственно придется делать редирект 301 в .htaccess, или все же не нужно менять структуру?
Мне кажется что нужно поменять структуру ЧПУ.
2. Не знаете как правильно сделать редирект?
Добрый день!
нет, ЧПУ менять не нужно.
Спасибо!
Здравствуйте Миша.
Огромное спасибо за блог и понятный и простой стиль изложения. Если Вас когда-нибудь посетят сомнения "нужен ли кому-то этот блог? стоит ли продолжать?" - не сомневайтесь - стоит!
У меня такой вопрос: я не работаю с уже кем-то созданной темой, а пытаюсь написать тему сам. При этом есть задача вывести блог (новости) не на главную страницу, а на созданный мною специально для этого шаблон. В этот шаблон подгружается хедер из файла header-page.php (с таким названием я создал файл специально для размещения хедера на внутренних страницах сайта. т.е. это специальный кастомный хедер для внутренних страниц, на главную страницу подгружается хедер из файла со стандартным названием header.php). В этом хедере (header-page.php) подгружается каждый раз название страницы (раздела) сайта с помощью функцией the_title. В данном случае это название - Блог. Когда я прохожу со страницы Блог по ссылке какого-либо поста чтобы почитать его подробней (в развернутом виде) я перехожу на страницу которая использует шаблон single.php. Вопрос как сделать так чтобы в хедере, когда я нахожусь в одном из постов, отображалось не название данного поста, а по прежнему - название страницы сайт - Блог. Для этого мне нужно создать еще один хедер для подгрузки его именно в single.php со статичным названием страницы Блог, прописанным в HTML? я пробовал так, но в таком случае хедер отображается вообще без заголовка.
Как правильно называть файлы дополнительных хедеров? может в этом дело?
И как потом правильно подгружать такие кастомные хедеры в какие-либо из внутренних страниц сайта?
Заранее благодарю за ответ и помощь!
Добрый день!
Спасибо :)
Относительно названий файлов дополнительных хедеров - всё ок.
Итак, если я правильно понял, у нас две страницы - single.php и шаблон.php, в которых выводятся названия страниц при помощи the_title() из одного файла header-page.php. Нужно сделать, чтобы и там и там отображалось название страницы - Блог. Есть пара вариантов:
1) Написать там без функции статично - Блог, (вы пишете, что заголовок пропадает вообще - хм, скорее всего тут уже просто ошибка была в третьем файле хедера). А что вы имеете ввиду под заголовком - то, что находится в
<title>
?2) Используя функцию get_the_title() вывести название страницы блога. Тут нужно будет знать ID этой страницы, например так:
Миша, большое спасибо за совет! Второй вариант подошел - все работает корректно.
Простое спасибо!)
Здравствуйте!
А не подскажете как вывести производные рубрики и посты, созданные с помощью платина. Есть стандартная страница вывода статей блога по 1 способу, но я создал по структуре такой же второй блок и надо чтобы на отдельной странице с отдельным шаблоном как вначале вашего 2 способа выводились все статьи как по принципу блога по умолчанию.
Здравствуйте,
Возможно, что вам помогут шаблоны страниц (ссылка) и произвольные циклы (ссылка и ссылка).
Здравствуйте. У меня в блоге на главной странице отображаются последние записи. Так вот названия всех этих записей (постов) отображается в одном месте и сразу. Подскажите пожалуйста как это исправить
Или хотя бы подскажите какой файл в шаблоне отвечает за вывод названий постов на главной странице
Добрый день!
Либо
front-page.php
, либоhome.php
, либоindex.php
.Спасибо вам большое!!!!!
А то насмотрелась тут уже видосов типа "только с помощью установки определённой темы" тьфу!!!
У вас и просто и понятно! Я танцую!!! Ура!!!
Пожалуйста)) Рад помочь)
Подскажи пожалуйста, как можно создать страницу похожую по функционалу на главную, что бы можно было на этой странице опубликовывать отдельные посты, например на другую тему и что бы эти посты не публиковались на главной? Буду очень благодарен за помощь!
Зависит от того, что из себя представляет главная страница. Вообще я так понимаю, что можно просто создать какую-то отдельную рубрику, нет?
Универсальное решение:
template-as-home.php
, копируем туда код и не забываем в начале файла указать:Михаил, здравствуйте, нужна ваша помощь. Прочитал вашу статью, но задачу решить не смог - тупой просто. А задача такова: есть главная страница она статичная, на ней хочу вывести два блока статей из разных рубрик. В данный момент на станице index.php все это дело работает, то есть все выводиться вместе со стандартным циклом и те циклы, которые вывожу через переменную wp_query тоже. Но стоит эти циклы перенести на страницу other.php, к примеру, так все циклы работают одинаково и выводят все последние записи, игнорируя параметры. Надеюсь на Ваш ответ.
Здравствуйте!
Позвольте уточнить — у вас имеются циклы через класс WP_Query и они при переносе тоже начинают игнорировать параметры?
Не знаю как получилось, но путем шаманских обрядов все заработало, но проблема теперь с пагинацией, как заставить её работать? А так же верно ли я определяю текущую страницу?
Вот собственно один из циклов:
уже второй день мучаюсь с навигацией, и никакого результата. Может из-за того что я использую эту страницу как главную, или из-за того, что вывожу на ней аж три цикла с разными категориями? Поэтому пагинация и не работает?
Немного поправил код, но это не дало результата.
Очень кстати: перенес этот цикл на index.php там все работает!
http://hastebin.com/ujusoluped.php
Возможно у параметров
posts_per_page
иpaged
не те значения, которые нужно — обычно чаще всего с этим бывают проблемы.Спасибо Миша!:)
Пожалуйста:)
У меня страница с новостями site/news/best-car, но при переходе в пост - выглядит так site/best-car
все, понял)) вот пенек
Миша, а что это у вас за плагин комментариев такой красивый? Или вы сами его писали?
СУПЕР!!! Искал решение данного вопроса долго и нудно! и вот - эврика! - все оказывается так просто !!!! СУПЕР спасибо!
Михаил, здравствуйте, при создании блога на необходимой мне странице, у меня возникли проблемы с кодом, код я позаимствовал с другого сайта. Код отображает записи списком, а мне нужно, чтобы записи выводились миниатюрами, при наведении на миниатюры они затемнялись и выводилось название статьи, в общем, чтобы код использовал стандартное оформление темы и отправлял, созданные мной записи на главную страницу. Помогите мне пожалуйста в данном вопросе, что нужно сделать с кодом, чтобы осуществить мою идею?
Здравствуйте, вам нужно найти файл шаблона или функцию в вашей теме, которая отвечает за вывод записей и просто позаимствовать оттуда код.
Может быть подскажете какие это файлы или функции? Я использую шаблон Snaps Версия: 1.0.4.
Я кроме TwentySeventeen и прочих стандартных никакие темы не использую. Ну кроме собственных. Так что вопрос точно не ко мне.
Поищите в коде. Можете по какому-то конкретному элементу просто поиск по файлам темы сделать.
Но ведь за вывод записей может отвечать сразу несколько файлов или функций, как тогда быть?
Не может.
На самом деле скорее всего (обычно) это делается через функцию get_template_part().
Допустим откройте в теме какой-нибудь файл шаблона, в котором выводятся записи (о том, как определить - тут) и затем поищите ту часть, которая отвечает за конкретную запись.
В общем тут наверное больше ничего не посоветовать.
Подправил имеющийся у меня код, по вашим рекомендациям, миниатюры начали отображаться, но они стали очень огромными, что можно с ними сделать?
Либо размеры изображений вам помогут, либо CSS.
И строку 14 гляньте, там муть какая-то.
Если эту муть убрать, то исчезает меню, и появляется описание под миниатюрами, которого не должно быть, как вы видите, я все делаю методом тыка. Размеры изображений пока не помогают...
Метод тыка хорош, но оснвоы нужно знать в любом случае. Рекомендую почитать это.
Лучше бы посоветовали изящное решение имеющейся проблемы.
Может быть обратимся к вашему коду, как можно его доработать, чтобы получился желаемый результат?
Мы возвращаемся к этому комментарию.
Тут правда больше нечего посоветовать, вам просто не хватает знаний. Освойте основы PHP, затем немного поразбирайтесь, как устроены шаблоны WordPress, ссылка 1, ссылка 2 и ссылка 3.
Либо поищите какого-нибудь фрилансера, занимающегося WordPress, думаю это у него займёт минут 15,
красава!
Добрый день!
Помогите реализовать, что бы Главная страница это была Статистическая страница + внизу лента блога, 5 статей.
Спасибо.
Добрый день!
Я бы рекомендовал кастом пейдж темплейт + WP_Query для ленты. Но можно и шорткодом посты попробовать.