» » » Индивидуальные шаблоны записей
logotip

Индивидуальные шаблоны записей

Всем привет! Сегодня на seo-mayak.com я расскажу, как создавать индивидуальные шаблоны для записей (single).

Для чего нужны шаблоны записей? Некоторое время назад мне понадобилось провести эксперимент, в ходе которого я хотел проверить влияние тегов h1,h2 и т.д, на продвижение тех или иных статей в поисковой выдаче.

Для этого мне требовалось изменить тег заголовка в одной конкретной записи. Понятно, что без создания отдельного шаблона сделать это было бы проблематично.

Парой надо вывести партнерский баннер на странице определенного поста, здесь также без шаблона записи не обойтись. В общем причины могут быть разные.

Но есть одна проблема, в WordPress не предусмотрена иерархическая система  для файлов записей (single), как для страниц (page), меток (tag) или категорий, о чем я рассказывал в прошлых статьях.

shablon dlia zapisi

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

А сейчас я хочу рассказать Вам про два способа, как заставить WordPress видеть шаблоны записей: с помощью плагина Custom Post Template или с помощью хука single_template.

Для начала давайте рассмотрим самый простой способ создания шаблона записи, который осуществляется с помощью плагина. Поехали!

Шаблон для записи с помощью плагина Custom Post Templates

Плагин Custom Post Templates очень простой и не требует особых настроек. Скачиваем плагин и активируем его, после чего в админке, на странице с записью, в правой колонке появится новый блок «Post Template»:

shablon dlia zapisi1

Теперь создаем файл-шаблон для записи. Процесс аналогичен созданию шаблона для статической страницы, с той лишь разницей, что прототипом шаблона должен служиться файл single.php.

В самое начало созданного файла надо добавить код вызова шаблона:

<?php
/*
Template Name Posts: mayak-single
*/
?>

Где mayak-single название шаблона. Не путать с названием файла! Название файла может быть любым набором английский символом с расширением .php, например —abcd.php.

Далее в админке, на странице с записью, в блоке «Post Template» выбираем название созданного шаблона:

shablon dlia zapisi2

Вот в принципе и все. Теперь запись, на странице которой мы выбрали название шаблона mayak-single, будет взаимодействовать с файлом abcd.php, хотя все остальные записи будут выводиться файлом single.php. По моему должно быть понятно даже новичкам. Идем дальше.

Шаблон для записи с помощью хука single_template

Что такое хук я уже рассказывая в статье wp_head() — функция WordPress и повторятся не буду.  С помощью хука single_template мы будем перехватывать работу функции get_single_template(), что находится по адресу wp-includes/template.php.

Функция get_single_template() возвращает путь до файла single.php, тем самым указывая WordPress какой файл должен отвечать за вывод записей.

Что нам надо сделать? Нам надо вмешаться в сие действие и добавить условие, которое позволит установить приоритет файлов, в название которых входит ID записи, над файлом single.php.

В редакторе Notepad++ открываем файл functions.php и приступаем к изменению «сознания» WordPress, касательно приоритетов файлов.

Для этого в самое начало после тега «<?php» вставляем следующее:

/*Функция подбора шаблона по ID записи*/

function mayak_single($mayak_template) {
global $wp_query, $post;
if(file_exists(TEMPLATEPATH . '/single-' . $post->ID . '.php')) {
return TEMPLATEPATH . '/single-' . $post->ID . '.php';
}
if(file_exists(TEMPLATEPATH . '/single.php')) {
return TEMPLATEPATH . '/single.php';
}
return $mayak_template;
}
add_filter('single_template', 'mayak_single');

Теперь если в корень темы поместить файл, например —single-1840.php, где 1840 — ID записи, то WordPress при открытии записи с ID 1840 обратиться именно к этому файлу, а если токового не будет найдено, то в силу вступит файл single.php.

Как видите ничего сложного!

До встречи!

С уважением, Виталий Кириллов

« Шаблоны для категорий WordPress. Как сделать каталог из рубрики

(следующая статья)

Комментарии: 17

  1. Наталья:

    Здравствуйте, Виталий!
    Наконец-то долгожданная статья и новости о долгожданном эксперименте!)
    (кстати, когда будут его результаты?)
    Насчет шаблонов для записей, очень познавательно! Я, правда, не провожу сео-экспериментов на сайте, но часто ввожу нововведения, так что может пригодится.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Наталья!
      Я и не думал, что Вы ждете эту статью)
      На счет результатов эксперимента, то я даже не знаю стоит ли их публиковать или просто предоставить возможность читателям самим отследить положение дел в поисковой выдачи. Ну раз уж зашла речь, то скажу…
      По основному запросу «Динамическая карта сайта»:
      Гугл — 1 место,
      Яндекс — 2 место.
      Я думаю эксперимент доказал, что тег заголовка не влияет на ранжирование той или иной статьи.

      Ответить
      • Наталья:

        Конечно, ждала) я все помню)
        Хоть результаты не в мою пользу, я Вас поздравляю с заслуженными «призовыми» местами.
        Что ж, Яндекс не обманывал!
        Насколько мне помнится, Яндекс Ваш сайт не долюбливал. Как Вам удалось добиться его расположения?)

        Ответить
        • Виталий Кириллов:

          Да уж, с Яшей я долго выяснял отношения. В прошлом году, когда блог незаслуженно попал под АГС и вышел из под фильтра, я сразу понял, что следом будет наложен еще один некий фильтр «недоверия», из под которого поможет выйти только время. И я оказался прав. Прошло где-то 9 месяцев, прежде чем Яндекс снял полностью все ограничения. Вот такая история)

          Ответить
  2. Наталья:

    Виталий, думала, я думала, где у меня на сайте может пригодиться шаблон для записей. Ну, и в общем, улучив такую возможность, стала думать о его реализации) Плагинами я предпочитаю не пользоваться, поэтому смотрела в сторону функции. Но Ваша функция подходит, только если для каждой записи создавать свой шаблон. А если, например, для половины записей один шаблон, а для второй половины – другой, то (даже если немного переделать функцию) проблематично было бы каждый раз добавлять ID записи. Можно, конечно, использовать произвольное поле в этом случае, чтобы определить для какой записи какой шаблон (или не мучится и использовать плагин). Но дело не в этом. В процессе всех этих мыслей у меня возник вопрос. А зачем вообще использовать шаблон для записей? Можно же в самом файле single.php прописать условие и все. Например, у меня для заголовков записи такой код:
    <h1 class="entry-title"><?php echo $single_title; ?></h1
    Т.е. можно было просто подставить условие для одной записи и заменить h1 на h2. Или я опять что-то напутала?!

    Ответить
    • Виталий Кириллов:

      Наталья я понял Вашу мысль. В самом начале статьи я обмолвился, что разработчики WordPress предусмотрели возможность создавать шаблоны по типу записи. Т.е. если группу записей отнести к одному типу и для данного типа сделать отдельный шаблон, то все получится. Я как раз собирался осветить эту тему в недалеком будущем.
      На счет условия для заголовков, пока не могу представить, как его можно прописать в общем файле. Надо подумать.

      Ответить
      • Наталья:

        Насчет типов записей тоже интересно) Будем ждать!

        Ответить
  3. Андрей:

    Спасибо за потрясающую и интересную статью!

    Ответить
  4. Виктор:

    Этот фильтр хорош если две три записи, а если 50 записей? Это что для каждой записи делать файл single-id. Может ответите на вопрос, как сделать массив ID записей?

    Ответить
    • Виталий Кириллов:

      Виктор, во-первых здравствуйте!
      Эта функция позволяет использовать фильтр, как для одиночной записи, так и для массива. По-моему получилось намного изящней.
      Решение следующее:
      1. Создаем в корне темы шаблон записи и называем его например single-test.php.
      2. В файл functions php вставляем следующую функцию:

      function mayak_single() {
           if (is_single(array(id,id,id))) {
              return TEMPLATEPATH . '/single-test.php';
          }
      }
      add_filter('single_template', 'mayak_single');
      

      Естественно id,id,id — массив ID записей.

      Ответить
      • Виктор:

        Привет Виталий

        Такой фильтр проще, мог бы и сам догадаться так сделать. Спасибо.

        Ответить
        • Виталий Кириллов:

          Кстати функция возвращает true если в массиве использовать slug или name записи.

          Ответить
  5. Егор:

    Здравствуйте, а я пользуюсь вышеупомянутым плагином. Он, правда долго не обновлялся, но там и обновляться нечему. Проверял его влияние на скорость загрузки, он входит в категорию «остальные» по версии P3 (Plugin Performance Profiler). Поленился в тот момент искать информацию, что-бы реализовать спец. шаблон записи кодом, но можно и заменить всегда успеть плагин кодом.
    Но вот встречаются такие сайты, на которых для каждой записи применяют отдельный шаблон. Потому-что макеты записей верстаются и для каждой PSD макет. Естественно через редактор верстку html-php не загонишь.
    Но все-же статья познавательная.

    Ответить
  6. Максим:

    Все сделал, как в мануале. В поле WP Post template ничего не отображается.

    Ответить
    • Виталий Кириллов:

      Где-то ошибка.

      Ответить
      • Сергей:

        Здравствуйте Виталий!

        Прежде чем задать вопрос хочу выразить огромную благодарность за проделанную вами работу!

        У меня плагин так же не работает. Окно плагина в посте появилось, но там нет ни одного шаблона. Я создавал новые, не появляются. В чем может быть проблема?

        Ответить
  7. Александр:

    А не проще тогда привязываеть шаблон записи к определённой категории. Например если мы задаем в редакторе категорию 1 — подхватывается один шаблон для записей, если выбираем другую категорию (категория 2) — подхватывается другой шаблон записей.

    Ответить

Оставить комментарий

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS