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

Я последнее время начал часто зависать на официальном русскоязычном форуме WordPress и решил писать статьи по вопросам, которые там задают. Надеюсь хоть кто-то посещает этот блог 🙂

Вопрос был следующий : «как для разных страниц записей и категорий(рубрик) выводить определенный шаблон?». Почему люди не умеют гуглить?

Немножко погуглив я легко нашел решение этой задачи.  Просто написать ответ на том форуме не есть хорошо, я решил написать полную статью об этом и показать её вам.

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

Иерархия шаблонов

WordPress обладает мощной системой шаблонов. Тема может использовать различные шаблоны для различных разделов сайта. Перед отображением страницы WordPress проводит поиск нужного шаблона, перебирая их в определённой последовательности. Для вывода архива конкретной рубрики последовательность такова:

category-slug.php -> category-id.php -> category.php -> archive.php -> index.php

Сначала WordPress пытается открыть шаблон, специфичный для данной рубрики, используя её строку-идентификатор (slug). Например, для рубрики ‘Дизайн’ со строкой-идентификатором ‘design’ индивидуальный шаблон должен находиться в файле category-design.php. Если шаблон вида category-slug.php не найден, следующая попытка — открытие шаблона с числовым идентификатором рубрики, например category-6.php. Затем происходит попытка открыть общий шаблон для всех рубрик — category.php. Если же и он отсутствует — задействуется общий шаблон архивов, т.е. archive.php. И наконец, когда ни один из них не обнаружен, для отображения рубрики используется index.php.

Начнем

Вариант 1

  1. Заходим в админку WP в раздел с категориями (Записи > Рубрики) и узнаем slug требуемой категории (жмем «Редактировать» возле категории, открывается страница редактирования рубрики, там вы увидите поле «Ярлык» это и есть slug. Предположим что наша категория называется «Блог», а ярлык, он же slug,  у неё «blog»
  2. Теперь создаем файл и называем его «category-blog.php». Не трудно догадаться, что blog — это slug требуемой категории. В Вашем случае slug явно будет другим.

Вариант 2

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

 

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

 

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

 

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

  1. Создать файл шаблона и назвать его «single-slug.php» или «single-id.php» slug и id это ярлык и идентификатор поста;
  2. Сделать копию файла «single.php» и назвать её, к примеру, «single-default.php» тем самым мы разграничим все посты по шаблонам для удобства.
  3. Открыть файл «single.php», удалить все содержимое и вставить следующий код:

Если вы хотите всем записям из определенной категории(рубрики) сделать уникальный вид тогда это код для вас:

Вариант 1 — ID категории(рубрики) в которой находится запись

<?php
  $post = $wp_query->post;
 
  if (in_category('32')) { //ID категории
      include(TEMPLATEPATH.'/single-portfolio.php');
  } else {
      include(TEMPLATEPATH.'/single-default.php');
  }
?>

Вариант 2 — slug(Ярлык) категории(рубрики) в которой находится запись

<?php
  $post = $wp_query->post;
 
  if (in_category('portfolio')) { //slug  категории
      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».

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

64 thoughts on “Разные шаблоны для категорий(рубрик) и страниц записей

    • if (in_category(‘portfolio’)) { //slug категории
      include(TEMPLATEPATH.’/single-portfolio.php’);
      } elseif (in_category(‘news’)) { //slug категории
      include(TEMPLATEPATH.’/single-news.php’);
      } else {
      include(TEMPLATEPATH.’/single-default.php’);
      }

  1. А если надо для 3-4 рубрик и ИХ записей сделать свой шаблон? То есть оформление всего сайта одно, а для группы разделов с входящими в них записями (постами) должно немножко отличаться

    • если надо изменить в том числе шапку и подвал то для этой записи и категории надо сделать отдельный header и footer.
      Делать шаблон для записей из категории намного сложнее, там отдельным файлом шаблона не отделаешься

  2. Здравствуйте, скажите пожалуйста. Есть возможность задавать шаблон отображения для категории через админку?

    • Добрый день!
      Для этого можно либо найти специальный плагин, либо можно через ftp создать файл для шаблона категории, а потом через «Админ панель — Внешний вид — Редактор» его редактировать

  3. Я добавила файлы category-ярлык.php, пробовала и category-id.php, и просто catergory.php, но шаблоны для рубрик все-равно берутся из файла index.php. Что я не так сделала? Вот файлы из моей темы http://joxi.ru/8239dqwC64LZOr

    • Визуально никаких проблем нет.
      Пришлите мне на почту вашу тему, попробую найти что не так:)

  4. Добрый день! Спасибо большое, все работает! Подскажите, пожалуйста, а как сделать так несколько раз. То есть нескольким рубрикам — разные шаблоны для записей? я так понял тут речь идет только как сменить оформление записей у одной рубрики, а если нужно, напрмер 5 рубрик и у всех 5 рубрик (их записей) должны быть разные шаблоны?

  5. А все работает (спасибо большое!!!), сколько угодно повторяя строку:

    elseif (in_category(‘news’)) { //slug категории
    include(TEMPLATEPATH.’/single-news.php’);
    }

    Только не работает, если в верхней рубрике есть подрубрики. Получается, невозможно назначить шаблон Верхней рубрике и он назначится всем подрубрикам? Надо прописывать эту строчку для каждой подрубрики? Или есть метод задания темы родительской рубрике и дальше все её дочерние рубрики будут с шаблоном родительской?

    • Антон, рад, что вам помогла моя статья.
      Например есть рубрика «Новости», в ней есть подрубрика «Мировые» и подрубрика «Местный»

      Если назначаете записи рубрику «новости», то она только в одной рубрике, а если назначаете ей рубрику «Мировые», то новость становится сразу в 2 рубриках «Новости» и «Мировые».

      Есди надо для каждой подрубрики свой шаблон, то и прописывать надо для каждой подрубрики код

      elseif (in_category(‘news’)) { //slug категории
      include(TEMPLATEPATH.’/single-news.php’);
      }
  6. Добрый день.

    Подскажите, а вы реализовывали ваш код на мультиязычных сайтах?

    К сожалению перестают подтягиваться переводы статей. Может можно что-то сделать?

    • Добрый день!

      Подскажите, а вы реализовывали ваш код на мультиязычных сайтах?

      Указанный мной код будет работать и в мультиязычных сайтах тоже.

      К сожалению перестают подтягиваться переводы статей. Может можно что-то сделать?

      С этим вопросом немного всё сложнее. Пишите мне на почту, обсудим.

  7. Здравствуйте, можете помочь пожалуйста, использую тему Poseidon , каждый раз при создании новой записи мне приходится менять с базового шаблона на шаблон fullwidth, как сделать fullwidth по уполномочию для всех записей?

    • добрый день!
      Сделать это невозможно.
      только если вы скопируете весь код из template fullwidth и вставите в файл стандартного шаблона

    • Подсказали на одном из сайтов, за вывод базового шаблона записей отвечает single.php я просто удалил базовый а fullwidth назвал single.php и все получилось. Тоже самое что и вы подсказали. Спасибо.

    • Обращаю ваше внимание!
      Если вы используете не самописную тему, то после обновления все изменения отменятся и шаблон новости опять станет стандартный.

      Если хотите чтобы изменения не отменились надо делать дочернюю тему

  8. Добрый день. Спасибо за статью. Но у меня образовалась проблемка и я не могу ее разрулить. Не могу отредактировать шаблон категорий, например элементарный h1 поменять на h2.
    — Вот страница с шаблоном категории http://geo-home.com.ua/area/angisa/
    — Вот к примеру h1 https://www.screencast.com/t/u42YOxc8W
    — Вот моя структура https://www.screencast.com/t/6zZsfkrsPW

    Смотрел archive.php и index.php — ничего не подошло
    Подскажите, как быть?

    • Добрый день!
      У вас в шаблоне ввод этой страницы может быть реализован разными способами. В данной ситуации рекомендую искать в каком файле прописан текст <h1 class="entry-title title_prop">
      И тогда будет понятно в каком файле это редактируется

    • Я уже так делал и перебрал все файлы. Это страница категорий. Единственное где я нашел этот кусок это blog_list.php, но изменения в нем ничего не дают https://www.screencast.com/t/44pBgemSt

    • За вывод категорий обычных записей отвечает archive.php, а вот за вывод других категорий объектов не могу найти уже все перерыл — https://www.screencast.com/t/zrRhDlErqtB

    • Добрый вечер!
      Какая у вас ошибка появляется?

    • Добрый день! Я не проверял, но уверен, что будет работать

  9. Добрый вечер! Скажите пожалуйста, как можно вывести статьи НЕ принадлежащие какой-то категории, а принадлежат только метке, например ПУГОВИЦЫ.
    Как вывести эти статьи на странице по метке? По id категории выводится, но уж не хочется плодить много категорий (я для каждой создаю свои индивидуальный файл).
    СПАСИБО!

    • Доброго времени суток Марина!
      Давайте уточним, где в хотите вы хотите выводить эти статьи, на какой странице и в каком месте?
      Это необходимо, чтобы подсказать вам оптимальный вариант.

  10. Здравствуйте! Спасибо, что ответили. Попробую объяснить.
    У меня есть главная, на ней выводятся все записи по мере поступления.
    Затем есть страницы, на которых выводятся категории, а затем я создаю записи( чтобы не плодить категории) по меткам. Например я нажимаю Идеи→Пуговицы→а уже на странице ЗАПИСИ Пуговицы находятся все статьи по метке Пуговицы.
    Вопрос в чем. Для каждой метки (как и для категории) создается отдельный файл, но он имеет название ID метки. Это очень неудобно, когда нужно найти файл в файловом менеджере ( сплошные single-250, single-280 и т д). Чтобы это действовало я в файл functions добавила код
    /*Функция подбора шаблона по ID записи*/
    function mari_single($mari_template) {
    global $wp_query, $post;
    if(file_exists(TEMPLATEPATH . ‘/single-name’ . $post->ID . ‘.php’)) {
    return TEMPLATEPATH . ‘/single-name’ . $post->ID . ‘.php’;
    }
    if(file_exists(TEMPLATEPATH . ‘/single.php’)) {
    return TEMPLATEPATH . ‘/single.php’;
    }
    return $mari_template;
    }
    add_filter(‘single_template’, ‘mari_single’);
    Вот вопрос, можно ли сделать подбор шаблона по названию метки?
    Я многое перепробовала, другие коды, просто меняла ID на tag или slug ничего не выходит. Как только меняю название шаблона и файла с single-250 на single-pugovicy все — страница записи со статьями Пуговицы открывает только саму запись Пуговицы.
    Если можете помогите пожалуйста поправить код, чтобы страницы записей можно было обзывать по имени метки
    Спасибо!

  11. Вот это страница Записи Пуговицы http://polnymledi.ru/idei-iz-pugovic/
    На ней должны быть статьи по метке Пуговицы. НО… увы, никак не выходит вывести статьи по названию метки.
    Вот так назван шаблон Single Post Template name: single-528 */ // идеи из пуговиц
    а хотелось бы Single Post Template name: single-pugovicy */ // идеи из пуговиц

    • и всё же не понимаю чем вам не нравятся стандартные шаблоны и стандартные функции)
      Обычные теги и категории полностью бы решили ваши задачи

  12. Доброй ночи! Все поняла, но можете вот так сделать?
    Вот так назван шаблон Single Template name: single-528 */
    а нужно Single Post Template name: single-pugovicy */

    Задать по slug, НЕ по ID, выборку постов на странице Тега Пуговицы

  13. Здравствуйте! Вопросик немножко не по теме, ведь он не о записях (single.php), а о страницах (page.php). Сейчас пишу сайтик для себя, решил поставить его на Вордпресс.
    Сначала объясню. В меню я имею 4 ссылки, то есть, это будут 4 странички, где будет расположены все записи, входящие в категорию этой странички. Например, в навигационном меню есть ссылка «Новости» — там буду отображать все новости, есть — «Обзоры» — там буду отображать все обзоры, и т.д. Но я хочу для страницы «Новостей», страницы «Обзоров» и прочих сделать разный дизайн. Мне следует создать дефолтный page.php для странички «Новостей», а потом создать page_reviews.php для «Обзоров», page_gallery.php для «Галереи» и т.д.?
    Отпишите пожалуйста, не хочу потратить время зря. Заранее спасибо 🙂

    • В такой ситуации можно сделать специальный page-slug.php для каждой страницы. я обычно делаю так

    • А можете пример какой нибудь скинуть с множеством page-slug.php? Был бы очень благодарен.

    • Алексей, вас интересует пример кода или сайта где я такое использую?

    • Чтобы предоставить пример кода надо понять что вы хотите сделать.
      Может вам проще использовать категории записей, чем страницы?

  14. Можно я обращусь к Вам позже, как к более опытному человеку? Если да, я так понимаю, Вам можно писать на почту, от которой пишет бот оповещения, что мне пришло сообщение здесь? Или может у Вас есть Facebook, Telegram, Viber, VK, чтобы было более удобно и быстро общаться?

    • Мои контакты есть на главной странице, лучше писать в вк)

  15. Хорошо, тогда как полностью сверстаю сайт, напишу Вам, если Вы не против 🙂

  16. Здравствуйте!
    Подскажите, пожалуйста, ну почему не подхватывает файл по ID category-7.php. Все равно читает шаблон archive.php. Сам файл лежит в корневом каталоге и плагином вижу, что не читает. В чем может быть проблема. Может где дополнительно надо указать параметры. Однако везде написано, что WP сам подхватит шаблон.

    • Никаких дополнительных настроек не надо делать.

  17. Здравствуйте, как добавить список в запрос? Сейчас такой код, но это не удобно.

    if (is_single('4562')) {
    include(TEMPLATEPATH.'/single-main-office.php');
    }
    elseif (is_single('12954')) {
    include(TEMPLATEPATH.'/single-main-office.php');
    } else {
    include(TEMPLATEPATH.'/single-all.php');
    }
    ?>

    • Увы, ситуация не изменится, пока разработчики не изменят логику шаблона для постов.

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

  18. Здравствуйте. Можете подсказать как включить отображение записей дочерних рубрик в родительской рубрике? Например, есть такая рубрика — Кухня, а там подрубрика — Салаты, так вот, когда я добавляю запись в подрубрику, то на сайте когда заходишь в рубрику Кухня, эта запись не отображается.

    • Стандартно включено отображение записей из дочерних рубрик.
      Возможно вы это отключили плагином или функцией

  19. В том и дело, что в шаблоне ничего не менял, а из плагинов только шорткоды установлены, Justified Gallery и Video Thumbnails. Тема называет VMag. Если можете подсказать, как исправить это дело, буду очень благодарен.

  20. Здравствуйте, уважаемые пользователи и гости сайта. Может подскажите, пожалуйста, что делать в такой ситуации.
    Небольшой, но важный для меня вопрос, заключается в том, что я хочу сделать ресурс, вот пример skorcomblik ru Но в сайтостроении и дизайне я не сильно сильна.
    Сколько в целом может стоить сайт под ключ?
    Обращалась в фирмы и там цены какие-то заоблачные называли.
    И что лучше, покупать шаблон или заказывать дизайн отдельно?
    Большая просьба к администрации, если я создала тему в неположенном месте, перенесите куда нужно.
    Спасибо заранее за ответы.

    • Сделать такой сайт достаточно просто, там нет ничего необычного, можно обойтись готовыми темами и плагинами.

      Стоимость сайта зависит от технического задания(всех хотелок и плюшек), от желаемого дизайна, от профессионализма и стоимости часа работы программиста.

      Я стараюсь не использовать готовые темы, а делать дизайн с 0. Объясню почему:
      1) уникальный дизайн это хорошо для продвижения(ходят такие слухи)
      2) уникальный дизайн будет сделан исключительно под вас и полностью будет решать ваши задачи
      3) скорее всего уникальный дизайн скорее всего будет оптимизирован лучше, чем готовые шаблоны и будет быстрее грузиться.

    • Все дело в том, что функция in_category() принимает 2 переменные:

      1. название категории
      2. id поста, который надо проверить

      Кодом $post = $wp_query->post; мы присваиваем второй переменной значение текущей записи

  21. Спасибо тебе, добрый человек!
    Я по наивности думал, что эта элементарная проблема (и на мой взгляд достаточно актуальная!) в wordpress решается элементарно, но не тут-то было! В инете довольно много идиотских статей на эту тему, и все как одна утверждают, что решается это всего лишь созданием файла single с названием категории. Не тут-то было! Иерархия шаблонов не помогает, а твоё решение — самое то!

  22. Я конечно понимаю, что это рецепты не для широких масс, но даже на своём блоге я не стал бы такой фигней заниматься. Писать жёстко Id и слаги в коде, а тем более под каждый создавать файл — это бредятина, все должно быть гибко и настраиваться в админке. Слаги и идишники могут меняться, и придётся лазить во внутренности

    • Я на это смотрю с двух сторон.
      1) гибкость это удобно и хорошо
      2) гибкость это лишний код, лишние запросы в БД, лишняя нагрузка

      В блоге я пишу личные заметки, чтобы код был оптимизирован, минимален, прост в понимании

  23. Здравствуйте. А можно как-то провернуть такое с постом кастомной таксономии?

  24. Вот за такие публикации мега-респек!
    Мало того что решение простейшее, так еще и эффективное!
    СПАСИБО БОЛЬШОЕ!

Добавить комментарий для Иван Отменить ответ