На днях, при верстке сайта под WordPress, я столкнулся с вопросом: «как для разных страниц записей и, соответственно, категорий выводить определенный шаблон?». Решение не заставило себя долго ждать и немножко поgoooogleв, я нашел как провернуть эту манипуляцию. Но, просто узнать и запомнить о данном решении мне мало, и я хочу поделиться этим со своими читателями. Возможно, кто-то и знает об этих методах, тогда он молодец!
Не знаю, может в WordPress 3.x этот вопрос можно решить в несколько кликов, но я, по крайней мере, не в теме. Так что будем реализовывать проверенными методами.
Шаблон для категории
Все мы знаем, что для отображения категорий могут использоваться шаблоны: «category.php», «archive.php», «index.php». Но так как «category.php» не часто встречается в темах WP, то используются обычно два остальных файла.
Давайте начнем!
- Для начала заходим в админку WP в раздел с категориями (Записи > Рубрики) и узнаем ID требуемой категории (жмем «Редактировать» возле категории, открывается страница, адрес которой в браузере выглядит приблизительно так: http://www.АДРЕС_ВАШЕГО_САЙТА/wp-admin/categories.php?action=edit&cat_ID=32). Цифры в конце ссылки и есть ID категории. Для примера возьмем вымышленную категорию с ID=32.
- Теперь создаем файл и называем его «category-32.php». Не трудно догадаться, что 32 - это ID требуемой категории. В Вашем случае ID явно будет другим.
Также мною лично было проверено, что вместо ID можно использовать название ссылки категории. К примеру, категория с ID=32 называется «Портфолио» и её ссылка (которая указывалась при создании) имеет название «portfolio». Тогда название файла шаблона будет таким: «category-portfolio.php». По крайней мере, у меня все сработало
Всё! Осталось только отверстать свежеиспеченный файл под ваш вкус и категория, которую Вы указали, будет выглядеть не так, как все.
Шаблон для страницы записи
Для страницы записи собственный шаблон задается немножко по другому. Для этого вам нужно:
- Создать файл шаблона и назвать его «single-portfolio.php»;
- Сделать копию файла «single.php» и назвать её, к примеру, «single-default.php».
- Открыть файл «single.php», удалить все содержимое и вставить следующий код:
<?php $post = $wp_query->post; if (in_category('32')) { include(TEMPLATEPATH.'/single-portfolio.php'); } else { include(TEMPLATEPATH.'/single-default.php'); } ?>
или вместо ID категории можете вставить название ссылки категории:
<?php $post = $wp_query->post; if (in_category('portfolio')) { include(TEMPLATEPATH.'/single-portfolio.php'); } else { include(TEMPLATEPATH.'/single-default.php'); } ?>
Как видите, мы указываем WP: если категория с ID=32 (или с названием «portfolio» - см. 2 вариант кода), тогда следует использовать шаблон для страниц записей «single-portfolio.php», но если категория имеет другой ID, тогда следует использовать шаблон «single-default.php».
И на этом также всё, Вам осталось только отверстать файл «single-portfolio.php» и все записи в указанной категории будут иметь свой вид.
Конечно же, можете называть файлы как хотите, кроме «single.php».
Надеюсь, Вам все было понятно. Если что, спрашивайте в комментариях!
Запланирована свадьба? Не определились еще с фотографом? Фотограф на свадьбу в Самаре нужен?
Демо в студию!
Сайт пока закрыт от просмотра гостей.
Могу привести другой наглядный пример такой реализации: http://elliotjaystocks.com/
Олег, очень полезная информация! Спасибо, очень помогла!
Всегда пожалуйста!)
Олег, привет) давненько что-то не заходил на твой блог, уже соскучился за потоком творческой информации)) Хотел спросить, мне вот нужно сделать главную страницу, у которой будет немного другое оформление, вышеизложенная информация мне поможет?))
Хотелось бы чтоб ты дал несколько советов по поводу таких “начинаний”
(не первый раз уже к тебе обращаюсь за помощью, спасибо тебе) если можно в личку
Или напиши статью “Помощь начинающим блоггерам”. Я думаю не одному мне будет интересно почитать и сделать выводы
З.Ы. уже не первый месяц хочу сделать свой блог, но никак не решусь
Привет)
Смотря что и как ты хочешь разместить на Главной. В этом посте описывается, как можно изменить определенные рубрики и страницы записей, но не Главную.
З.Ы. Спасибо за идею, насчет статьи подумаю
Спасибо большое. Использовал это у себя.
Отлично!)
“Также мною лично было проверено, что вместо ID можно использовать название ссылки категории. К примеру, категория с ID=32 называется «Портфолио» и её ссылка (которая указывалась при создании) имеет название «portfolio». Тогда название файла шаблона будет таким: «category-portfolio.php». По крайней мере, у меня все сработало”
Вордпресс имеет приоритет по выбору файла для отображения, вот очередность: category-slug, category-id, category, archive, index. (так подсказывает официальный мануал)
А вообще советую почаще читать официальные мануалы, там фигню никогда не пишут
Только поддерживаю!) Но иногда тяжело найти и разобраться, если ты не особо дружишь с PHP)
Олег, подскажите, пожалуйста, что нужно изменить в коде, чтобы две разные категории выводились одним шаблоном, а еще две – другим?
Создайте по 2 файла с одинаковым содержимым, но назовите их в соответствии с ID категорий.
К примеру, первые два файла для двух категорий с одинаковым шаблоном:
«category-1.php», «category-2.php».
И вторые два файла с другим шаблоном:
«category-3.php», «category-4.php».
Напомню, что цифры в названии файлов – это ID категорий.
В итоге получится 4 дополнительных файла в папке с Вашей темой.
Но, если у Вас на сайте всего 4 категории, то для первых двух категорий с одинаковым шаблоном Вы создаете так, как описано выше, а все остальные категории будут использовать файл «category.php» по умолчанию. В этом файле прописываете другой шаблон.
Этот вариант сократит количество дополнительных файлов темы с 4 до 2.
Возможно, существует вариант попроще, но я пока не знаю о нём)
Создать два файла, category-design1.php и category-design2.php. Можно даже создать папку и кинуть эти файлы туда, а в файлах category-(1,2,3,4…).php инклюдить необходимый файл (category-design1.php или category-design2.php), так проще контролировать код.
Олег и sofcase, спасибо за ответы! Буду пробовать, надеюсь, все получится.
Юра, спасибо за вариант, действительно удобный)
или так if ((in_category(‘3′))or(in_category(‘10′)))
Здравствуйте!
Подскажите как использовать это в header.php
Постановка задачи:
Если это архив категории с id 7 или id-категории к которой относится просматриваемая публикация равно 7, тогда нужно использовать div class=”777″, если нет, тогда использовать div class=”000″
Заранее благодарю за помощь.
Здравствуйте!
Шаблоны для «category.php» и «single.php» не имеет никакого отношения к «header.php».
Спасибо за статейку. Хоть ещё не попробовал этот способ, однако меня давно уже интересовала идея, как вывести запись в свой шаблон при определённом условии.
Надеюсь, что у Вас все получится!
Спасибо помогло! А как добавить еще категории в шаблон страницы. Вот есть категория ID=32, а нужно еще ID=17 и ID=15 отображать также как категорию с ID=32
Дима, посмотрите в комментариях к этому посту вопрос Константина (вопрос похож на Ваш). На его вопрос были толковые ответы.
Спасибо за статью! Один вопрос только возник: для подкатегорий шаблон будет таким же, как у родительской категории, или будет выводиться стандартный?
А если стандартный, то, наверное, надо будет кодом к каждой подкатегории указывать, какой шаблон использовать что ли?)
Я не тестил этот момент. Скорее всего будет стандартный. Хотя я могу и ошибаться, конечно
Если, все-таки, будет выводиться стандартный, тогда для каждой подкатегории нужно будет указывать айдишники или «слаги», как я описал в посте.