WordPress — Специальные шаблоны single.php для разных постов, категорий или тэгов

Возьмем случай, когда ваш сайт имеет очень разнородное содержание. Допустим, блог, статьи, видео, фотогалереи и т.д. Естественно, в таком случае шаблон single.php (в данной статье под словом «шаблон» я буду иметь ввиду файл темы) не может быть одинаковым для всего этого, ведь для разного содержания лучше иметь отдельный шаблон, который будет наиболее полно отображать свой контент.

Таким образом, у нас есть набор категорий или тэгов, и для каждой (или только для некоторых) нам нужен свой single.php со своим дизайном.

Решение 1  — простое

Ставим плагин «Custom Post Template«. Этот плагин позволяет выбирать шаблон дизайна для каждого поста. Однако делать это нужно вручную и в каждом посте. Если у вас их много, планируйте много времени.

Естественно, вам понадобится сам шаблон. Сделать его очень просто: копируете ваш single.php с новым именем (например, template-video.php) и в самый верх вставляете:

Вместо Video можете вписать любое название вашего шаблона. Теперь этот шаблон будет доступен для выбора.

Решение 2 — гибкое

Это решение наиболее универсально, поскольку за логику подбора шаблона будет отвечать WordPress.

Для начала создайте в папке вашей темы папку single и переместите в нее ваш single.php. Далее добавьте в ваш functions.php следующие строки:

Таким образом, у нас есть возможность создавать отдельные шаблоны single:

  • по ID поста
  • по ID или слагу категории, к которой относится пост
  • по ID или слагу тэга, к которому относится пост

Таким вот нехитрым способом вы можете сделать индивидуальные шаблоны single для вашего сайта.

Если есть вопросы задавайте в комментариях.

  • А обновлять данные страницы, я так понял, только через код придётся?

    • Если меняется дизайн шаблона, то да, а контент в админке, как обычно.

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

    • Так напиши плагин) А что конкретно не хватает? Может что-то в доках не дочитал? Вроде по функционалу написано очень немало, правда, многое сделано через жопу.

      • дык хотелось бы чтобы довели до ума то что есть, а не обвешивать сайт плагинами аки елку шариками

        по сути есть такая штука как типы постов. в дефолтной теме есть выбор типа поста ( «фото», «цитата» и т. п. ). собсно типы постов строго ограничены и добавить свой не лазая в функции движка нельзя. по крайней мере в кодексе про это ничего не сказано

        • Эмм, то, что ты перечислил называется «post formats», а то, что ты хочешь называется «custom post types». Гугли)

          • custom post types вроде как добавляет новый пункт в меню в админке, а не расширяет имеющийся

          • custom post types обладают полной функциональностью стандартных постов и могут иметь отдельную таксономию, не смешиваясь со стандартными постами.
            Как именно ты хочешь расширить этот функционал?

          • вложенность закончилась 🙂

            я не хочу делать отдельный пункт в админке для каждого типа постов. просто расширить post formats.
            не исходя из категорий, тегов и не используя дополнительные поля

          • Да, с форматами такое не предусмотрено) Я, кстати, так и не понял их роль, и ни разу не пользовался, видимо, кому-то из разработчиков не терпелось сделать свой tumblr на wordpress 😉

          • в том то и проблема. такая удобная и классная штука, но до ума не довели. хотя по сути никакой сложности в этом нету

  • поскольку Post formats 10 штук, то, если вы их используете, то, наверняка, не все.
    в таком случае можно переименовать под свои нужды свободные
    пример здесь
    http://wpmu.org/how-to-quickly-rename-a-wordpress-post-format/

    • переназначать то что уже задано разработчиками под определенную цель не самая лучшая практика. ожидается что формат изображения будет выводить изображение, а не что-то неизвестное

  • Денис

    В WordPress есть форматы постов. Их аж 9.
    вот такой код в в loop-e
    [php]<?php get_template_part(‘content’, get_post_format()); ?>[/php]
    потом создаем шаблон вывода для каждого формата и все.
    зачем изобретать велосипед!

    • Именно потому, что их число ограничено и нельзя создать еще несколько post formats часто не подходят. В этом же способе можно создавать индивидуальный дизайн хоть для каждого поста. Гибкость чувствуете?

  • Artem

    А как воспользоваться шаблоном при создании поста?

    • Ничего указывать в посте не нужно, все проще.
      Сделайте нужный шаблон, например, single-cat-video.php. Соответственно, все посты из категории Видео будут показаны этим шаблоном, а все остальные посты — стандартным single.php

      • Artem

        А если я хочу сделать просто шаблон с черным фоном. Я создал single-black.php. Что надо сделать, как его выбрать?

        • Решение 1

          • Artem

            Понятно. Благодарю.

  • Аркадий

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

    • Нужно изменить код для категорий.
      Алгоритм такой:
      1. Определить категорию текущего поста
      2. Определить в какую категорию входит данная категория
      3. Если то, что нужно — отдавать нужный single
      Готового решения не дам, нет времени. Нужные функции легко нагуглить.

  • Игорь

    Народ чего вы херней страдаете. Можно создать дополнительные шаблоны для записей всего лишь создать копию single.php и переименовать её single-[тип записи].php или single-[id].php

    • AdminAndrey

      У меня так не получилось, наверное по тому что не была включена функция типов записи.

  • Залез в файл single.php потом после некоторых монипуляций (после которых случилось вот это http://electrogazoswarka.ru/?p=698
    все в низ сползло,а вот статические стр на месте.
    Как можно востановить?что я нетак сделал?

  • OlegLyubchenko

    Замечательное решение! Спасибо! Как-раз есть два типа записей single именно по категориям, которые нужно разделить.

  • спасибо

  • AdminAndrey

    красавчик, спасибо))

  • The Readnow

    Есть вопрос ) Есть 2 купленные темы ! Одну использую как основную, вопрос как вторую использовать для конкретных записей ? (они будут в виде landingpage (получается каждый шаблон имеет свой свойства и фишки )

    Сориентируйте пжст — куда копать?)

    Например:
    Главная страница — http://site.ru/wp-content/themes/theme1
    Записи на сайте — http://site.ru/wp-content/themes/theme1
    Запись на сайте id7828 — http://site.ru/wp-content/themes/theme2

    • Neolot

      Здесь проще использовать плагин “Custom Post Template“.
      Нужно создать шаблон страницы из второй темы и указать этот шаблон для нужной записи.

      • The Readnow

        как то подробнее можно?) — ведь по факту все изменения делаются для в папке 1 шаблона, как прописать путь к другому шаблону ( в Joomla например это делается по «галочке» — здесь с этим сложнее)
        Пока что прочитаю про Custom Post Template

  • WEB WORKER

    Всем привет!
    На сайте работает сортировка по разным категориям. Переход на сингл производится с помощью the_permalink() и каждый раз когда я захожу с отсортированного по категории списка я попадаю в один и тот же single.php все замечательно, но когда в сингле жмешь на следующую запись она выходит из общего списка без сортировки.
    Подскажите пожалуйста как создать постраничную навигацию для разных категорий и как создать для них синглы?

  • Максим Шадрин

    4.4.2 wordpress выдает такое:
    Notice: Use of undefined constant SINGLEPATH — assumed ‘SINGLEPATH’ in …/renessans/wp-content/themes/renessans/functions.php on line 80 Notice: Trying to get property of non-object in …/renessans/wp-content/themes/renessans/functions.php on line 122 Notice: Trying to get property of non-object in …/renessans/wp-content/themes/renessans/functions.php on line 124
    Константа объявлена, почему он ее не видит? Пытался объявить внутри функции, результат тот же.
    И определение оригинальных шаблонов не работает

  • Виктор Лошанев

    Тут бинарная система или работает или не работает, этот код в статье не работает

    • Neolot

      Коду в статье больше 3 лет. Актуализируйте и пользуйтесь.

  • Сева

    Статья конечно хорошая, я сам ни чего не смыслю в написании кода и напишу точно такую же. На все замечания и недовольные отзывы можно ответить СТАТЬЯ НАПИСАНА ДЛЯ *** ТЕМЫ. актуализируйте ПОД СВОЮ ТЕМУ И ПОЛЬЗУЙТЕСЬ :))) Разводилово и точка…