Разные шаблоны для категорий и страниц записей

27
Июль
2011

Разные шаблоны для категорий и страниц записей в WordPress

На днях, при верстке сайта под WordPress, я столкнулся с вопросом: «как для разных страниц записей и, соответственно, категорий выводить определенный шаблон?». Решение не заставило себя долго ждать и немножко поgoooogleв, я нашел как провернуть эту манипуляцию. Но, просто узнать и запомнить о данном решении мне мало, и я хочу поделиться этим со своими читателями. Возможно, кто-то и знает об этих методах, тогда он молодец! :-D

Не знаю, может в WordPress 3.x этот вопрос можно решить в несколько кликов, но я, по крайней мере, не в теме. Так что будем реализовывать проверенными методами.

Шаблон для категории

Все мы знаем, что для отображения категорий могут использоваться шаблоны: «category.php», «archive.php», «index.php». Но так как «category.php» не часто встречается в темах WP, то используются обычно два остальных файла.

Давайте начнем!

  1. Для начала заходим в админку WP в раздел с категориями (Записи > Рубрики) и узнаем ID требуемой категории (жмем «Редактировать» возле категории, открывается страница, адрес которой в браузере выглядит приблизительно так: http://www.АДРЕС_ВАШЕГО_САЙТА/wp-admin/categories.php?action=edit&cat_ID=32). Цифры в конце ссылки и есть ID категории. Для примера возьмем вымышленную категорию с ID=32.
  2. Теперь создаем файл и называем его «category-32.php». Не трудно догадаться, что 32 - это ID требуемой категории. В Вашем случае ID явно будет другим.

Также мною лично было проверено, что вместо ID можно использовать название ссылки категории. К примеру, категория с ID=32 называется «Портфолио» и её ссылка (которая указывалась при создании) имеет название «portfolio». Тогда название файла шаблона будет таким: «category-portfolio.php». По крайней мере, у меня все сработало :)

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

Шаблон для страницы записи

Для страницы записи собственный шаблон задается немножко по другому. Для этого вам нужно:

  1. Создать файл шаблона и назвать его «single-portfolio.php»;
  2. Сделать копию файла «single.php» и назвать её, к примеру, «single-default.php».
  3. Открыть файл «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».

Надеюсь, Вам все было понятно. Если что, спрашивайте в комментариях! ;)

Запланирована свадьба? Не определились еще с фотографом? Фотограф на свадьбу в Самаре нужен?

Подписаться на RSSВы можете подписаться на RSS или на E-mail рассылку:

Оставить комментарий с помощью формы ВКонтакте

Комментариев (56) к “Разные шаблоны для категорий и страниц записей”

  1. Максим пишет:

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

  2. Ильдар пишет:

    Все вроде подробно расписано, но почему то не получается в single.php добавил

    post;

    if (in_category(‘19′)) {
    include(TEMPLATEPATH.’/single-item.php’);
    } else {
    include(TEMPLATEPATH.’/single-post.php’);
    }
    ?>

    Вместо 19 пробовал ярлык, но все равно отображает дефолтный single-post.php. Не знаете в чем может быть ошибка?

  3. David пишет:

    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

  4. Аим пишет:

    Все вроде подробно расписано, но почему то не получается в single.php добавил

  5. Аим пишет:

    Спасибо огромное! Очень мне помогло.

  6. Евген пишет:

    Разбирался с синглами, было нужно сделать отдельный вид их вывода и столкнулся с проблемой. Используя код из статьи, задать вид можно только для постов из одной категории. Если же нужно будет этот вид вывода поста применить к постам из другой категории, то возникает приколюха, вставка дополнительного кода

    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

  7. Looler пишет:

    Здравствуйте, очень помогла статья, но у меня такая задача, мне нужно для несколько разных страниц – несколько разных вариантов страниц, т.е. кроме single-portfolio.php будут еще например single-news.php, single-products.php и т.д.
    Как быть в таком случае?

    • Евген пишет:

      Попробуй сделать так, как расписано у меня в комменте

  8. Ngorco пишет:

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

    Иначе, господа, мы приближаемся к принципам джумлостроения, что, на мой взгляд, неэтично :-D

  9. 4idroid.com пишет:

    Крутяцкий дизайн сайта!

  10. Ruson пишет:

    Добрый день, а как по поводу самой ленты вывода, тоесть index.php ему тоже можно ID присваивать как и categoty, типа index-32.php ?