На днях, при верстке сайта под 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».
Надеюсь, Вам все было понятно. Если что, спрашивайте в комментариях!
Запланирована свадьба? Не определились еще с фотографом? Фотограф на свадьбу в Самаре нужен?
Спасибо огромное! Очень мне помогло. А я уже хотел для этих целей создавать разные поддомены и на каждый из них вешать вордпресс, а тут вон оно как все просто!
Все вроде подробно расписано, но почему то не получается в single.php добавил
post;
if (in_category(‘19′)) {
include(TEMPLATEPATH.’/single-item.php’);
} else {
include(TEMPLATEPATH.’/single-post.php’);
}
?>
Вместо 19 пробовал ярлык, но все равно отображает дефолтный single-post.php. Не знаете в чем может быть ошибка?
tak vopros vot u my esti tema kotoraia mne nravitsia nu naprimer dlia bloga a esti drugaia kotoraia mne nravitsia nu dlia foruma i eto vse na wordpress kak mne sdelat tak chtobi esli polizovatel zaxodil na forum on bi videl takuiu temu a esli na blog to druguiu vi skazali kak sdelat stranicu da no u mia est gotovaia verstka eto vtoraia tema kak eio zapixnut tuda v etu sozdanuiu vashim sbosobbom stranicu
Все вроде подробно расписано, но почему то не получается в single.php добавил
Спасибо огромное! Очень мне помогло.
Разбирался с синглами, было нужно сделать отдельный вид их вывода и столкнулся с проблемой. Используя код из статьи, задать вид можно только для постов из одной категории. Если же нужно будет этот вид вывода поста применить к постам из другой категории, то возникает приколюха, вставка дополнительного кода
post;
if (in_category(‘portfolio’)) {
include(TEMPLATEPATH.’/single-portfolio.php’);
}
** if (in_category(‘portfolio2′)) {
include(TEMPLATEPATH.’/single-portfolio.php’);
}
else {
include(TEMPLATEPATH.’/single-default.php’);
}
?>
влечет вывод дублирующегося контента для постов из категории ‘portfolio’, причем выводятся они за пределами тэга .
Поковырявшись, нашел методу (публикация старая, однако упоминание нашел только одно), которая пригодится экспериментаторам, как пригодилась и мне.
Вместо отмеченной звездочками строки нужно использовать
elseif ( in_category(‘portfolio2′) ) {
include(TEMPLATEPATH.’/single-portfolio.php’);
}
Предлагаю админу обновить свой пост с выкладкой этого варианта.
P.S. если не корячиться с кодом, то можно использовать и вариант из статьи автора. Для вывода пресловутого single-portfolio.php для постов разных категорий нужно создать и присвоить этим постам одну общую категорию, ID или название которой и прописывается в single.php
Здравствуйте, очень помогла статья, но у меня такая задача, мне нужно для несколько разных страниц – несколько разных вариантов страниц, т.е. кроме single-portfolio.php будут еще например single-news.php, single-products.php и т.д.
Как быть в таком случае?
Попробуй сделать так, как расписано у меня в комменте
А можно, оставаясь верным идеологии построения сайта на WP, не создавать гору файлов, а верстать шаблон отображения материала в категории сразу в файле категории.
Иначе, господа, мы приближаемся к принципам джумлостроения, что, на мой взгляд, неэтично
Крутяцкий дизайн сайта!
Добрый день, а как по поводу самой ленты вывода, тоесть index.php ему тоже можно ID присваивать как и categoty, типа index-32.php ?