Индивидуальный шаблон для отдельной записи произвольного типа в WordPress

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

В моем случае это были посты произвольного типа movie, шаблон, который их выводил назывался соответственно movie.php.
Нужно было сделать так, чтобы каждая запись из раздела «Movie» могла иметь собственное графическое оформление, реализуемое при помощи встроенного редактора.
Конечно, можно было прибегнуть к использованию Custom Fields, но их пришлось бы создавать очень много.
Поэтому решил, что будет логичнее, если каждая запись обзаведется собственным шаблоном, который можно менять средствами редактора и style.css.

Для того, чтобы появилась возможность создания шаблонов для отдельных постов в виде файлов по аналогии со страницами, в functions.php добавляем фрагмент:

add_filter( 'single_template', function( $template ) {
    global $post;
    if ( $post->post_type === 'movie' ) {
        $locate_template = locate_template( "single-movie-{$post->post_name}.php" );
        if ( ! empty( $locate_template ) ) {
            $template = $locate_template;
        }
    }
    return $template;
} );

В строке 3 'movie' указываем тип записей, для которых необходимо создать поддержку шаблонов.
В 4-й строке "single-movie-{$post->post_name}.php" вид формирования отдельного шаблона для записи.
В данном случае шаблоны будут задаваться по такому виду: single-movie-наименованиезаписи.php.
Теперь для записи, доступной по адресу movie/robocop3/
Мы создаем шаблон single-movie-robocop3.php и помещаем его в корневую папку темы.
Индивидуальный шаблон для этой записи создан, можем наполнять и оформлять его.
Аналогичным способом создаем шаблоны для других записей.

Минус метода в том, что при наличии большого числа записей будет соответствующее число шаблонов, но с точки зрения оформления, оно того стоит!

Вывод записей WordPress в любом месте сайта #2

Вывод записей WordPress в любом месте сайта #2

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

Вывод записей WordPress в любом месте сайта #2

В связи с этим часто возникает необходимость вывести записи определенной рубрики на главную страницу в необходимом количестве.
Я уже рассказывал о выводе записей определенной рубрики WordPress в любом месте блога, используя файлы темы или сайдбар.
Сегодня продемонстрирую ещё один пример, как лаконично вывести пять последних новостей на главную страницу сайта.
Для этого я использую произвольный цикл с глобальной переменной $post

<ul>
<?php
$pc = new WP_Query('category_name=novosti&showposts=5'); ?>
<?php while ($pc->have_posts()) : $pc->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail(array()); ?></a>
<span class="news-date"><?php the_time('j F, Y'); ?></span><br/>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
</ul>

Что делает этот фрагмент кода?
Для начала мы задаем создание списка html-тегом ul.
Далее при помощи класса WP_Query мы получаем необходимое количество постов из указанной категории WordPress:
category_name=novosti &showposts=5
В данном случае будут получены 5 постов из категории под названием «novosti».
После этого включается цикл, в котором создаются 5 новостей в виде пунктов li.
У каждой записи списка предусмотрен вывод заголовка в виде ссылки на полное содержание поста и миниатюры (thumbnail), а также даты.

В конце цикла мы как бы обнуляем наши запросы при помощи функции wp_reset_postdata ().
Это необходимо для того, чтобы избежать глюков с ID постов и страниц.

Рассмотренный фрагмент необходимо дописать в то место файла темы, где необходимо вывести данные записи.
В моем случае это файл для главной страницы сайта.

Данный произвольный цикл можно использовать и в сайдбаре, в тестовом виджете.
Для этого необходимо установить плагин PHP Code Widget, который обеспечит выполнение PHP скриптов в обычном тестовом виджете WordPress.
Надеюсь, данная заметка окажется полезной.

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

По умолчанию WordPress выводит анонсы записей на странице отдельной рубрики в том количестве, которое указано в настройках: Настройки — Чтение — На страницах блога отображать не более...
Подробнее →

Создаем модальное окно «Заказать обратный звонок»

Сегодня рассмотрим процесс создания блока Заказать обратный звонок.
Подобный блок можно часто увидеть на страницах интернет-магазинов, торгующих по всем регионам России. Функционал подобного блока заключается в том, что администратор сайта получает уведомление от посетителя с просьбой перезвонить по указанному номеру. Подробнее →

Отключаем ревизии записей и удаляем их из базы

При создании записей в WordPress по умолчанию создаются ревизии записей (revisions) или редакции записей.
Создаются они для того, чтобы была возможность быстрого восстановления в случае какого-либо сбоя. Это автоматическисоздаваемые резервные копии записи.
Они создаются до тех пор, пока вы редактируете запись и она не будут опубликована.
Это может продолжаться определенное количество времени, соответственно и количество ревизий записи для каждого поста может быть различным.
Все они хранятся в базе данных вместе с содержимым записи.
И с ростом числа записей растет и число ревизий, что увеличивает базу данных.
При создании сайтов на системе WordPress, мы отключаем автоматическое создание ревизий записи, и рекомендуем подготовить материал локально, а после перенести его на сайт, создав новую запись.

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

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

Настройки экрана в WordPress

Откроется дополнительная панель настроек «Показывать на экране», где необходимо отметить пункт «Ревизии» или «Редакции».

Отключаем ревизии записей и удаляем их из базы

После этого ниже текстового редактора будет отображен виджет «Ревизии».

Виджет Ревизии в WordPress

Как уже говорилось, ревизий может быть очень много.

Теперь отключим создание ревизий для записей.

Для этого в файл wp-config.php, расположенный в корне сайта, необходимо дописать одну строку:

define('WP_POST_REVISIONS', 0);

Данный фрагмент выключает создание ревизий для записей.

Теперь удалим уже созданные ревизии из базы данных.

Запускаем PhpMyAdmin из панели управления хостингом и выбираем базу MySQL сайта.

phpMyAdmin - выбор базы MySQL

Если у вас несколько сайтов, то выбираем базу того сайта, с которым работаем.

Далее необходимо выполнить SQL-запрос, который удалит все созданные ранее ревизии.
Выбираем из верхнего меню раздел «SQL»:

SQL

Далее в поле необходимо ввести запрос:

Окно ввода sql-запроса

DELETE FROM wp_posts WHERE post_type = "revision";

И нажать «ОК».

В случае корректного исполнения sql-запроса, вы увидите сообщение:

Сообщение об успешном удалении ревизий из базы

Здесь стоит сказать о том, что при установке WordPress создается база, таблицы которой по умолчанию имеют префикс «wp_».
Структуру базы можно посмотреть в левой панеле PhpMyAdmin:

Структура базы данных WordPress

Выполняя sql-запрос мы удалили из таблицы wp-posts (таблица хранит все записи сайта, черновики и ревизии) данные со значением «revision».

Случается, что при установке WordPress префикс таблиц изменяется на другой (что мы настоятельно рекомендуем делать в целях повышения защиты), поэтому sql-запрос может выглядеть иначе, а именно:

DELETE FROM префикс таблиц_posts WHERE post_type = "revision";

Где «префикс таблиц» это тот префикс, который вы указали при установке WordPress, который можно посмотреть в структуре базы в левой в левой панеле PhpMyAdmin.

Успехов в создании и поддержке сайтов!

Дополнение

В версии WordPress 3 и выше отключение ревизий записи происходит иначе.
Для отключения необходимо в директории wp-includes найти файл default-constants.php, скачать его на локальный компьютер, затем найти в нем фрагмент:

    if ( !defined('WP_POST_REVISIONS') )
        define('WP_POST_REVISIONS', true);
}

и заменить значение true на false,
сохранить и закачать обратно на сервер с заменой старой версии файла.

Добавление новых кнопок в редактор

При создании новой записи часто приходится дорабатывать её внешний вид, используя редактор в режиме HTML — удалять ненужные теги (<br />, <span>, <p></p></span>) или добавлять новые для улучшения внешнего вида записи — создавать отдельные акцентные блоки, вставлять таблицы и т.п. Для этого можно использовать различные плагины, расширяющие функционал встроенного редактора. Но любой дополнительный плагин — это лишняя нагрузка. Подробнее →

Создание новой области для виджета

Благодаря большому количеству дополнительных плагинов и хорошей документации WordPress обладает отличной гибкостью, позволяющей превратить сайт со скромным шаблоном в многоинформационный портал или даже интернет-магазин.
Вся необходимая информация может быть выведена на страницы сайта при помощи специальных виджетов.
Подробнее →

Запрет индексации отдельных записей

Продолжаем говорить об оптимизации сайта, и сегодня рассмотрим, как запретить поисковым роботам индексировать отдельные записи сайта.
Подробнее →

SEO оптимизация страниц рубрики

SEO оптимизация страниц рубрики WordPress
Сегодня будем говорить о поисковой оптимизации, а точнее рассмотрим как оптимизировать страницы рубрик для поисковиков.

Рубрика — это страница или несколько страниц, отображающих анонсы записей (с изображениями или без), отнесенных к этой рубрике.
В интернет-магазинах рубриками могут выступать категории товаров, например «Женская одежда», а подрубрикой — «Джинсы», таким образом страницы рубрики могут представлять собой каталог товаров и служить отличной точкой входа на сайт.

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

Мы попробуем реализовать несколько улучшений и добавим пару свойств, которые помогут рубрикам сайта выглядеть в глазах поисковых роботов более привлекательно. Итак, наша задача — оптимизировать рубрики сайта на Вордпресс для поисковых систем. Приступаем по порядку...

Сразу замечу, что на сайте, с которым мы будем работать уже установлен плагин All In SEO Pack (SEO все в одном). Некоторые его настройки также будут задействованы.

1. Индексация рубрик

Обычно рекомендуется закрывать рубрики от индексации, чтобы избежать дублей, поскольку на страницах рубрики выводится анонс записи, содержащий несколько начальных предложений.
Мы исправим это дело.
Для начало откроем рубрики для индексации (если они закрыты).
Если в файле robot.txt присутствует строка Disallow: /category/, удаляем её.
Как правило анонс для записи выводится из фрагмента до тега «more», установленного при помощи текстового редактора Вордпресс.
На собственном опыте встречал сайты, где при написании постов тег «more» не использовался ни разу, в результате — на главной анонсы обрезались автоматически, а в рубриках шли целые статьи от начала и до конца, чего делать крайне не рекомендуется.
Для создания анонса нужно использовать поле «Цитата» в окне создания записи.
Текст цитаты в идеале должен быть уникальным, а не отрывком из основной записи.
В этом случае на страницах рубрики будет содержаться оригинальный контент и она будет хорошо индексироваться поисковиками.

Если установлен плагин All In SEO Pack, проверим настройки.
В пункте:

Индексация рубрик в WordPress

убираем отметку «v». Обновляем настройки.

2. Описание рубрик

По умолчанию, если описание рубрик не было заполнено, то при просмотре исходного кода страницы рубрики, мета-тег description отсутствует:

Мета-тег description отсутствует

Как я уже говорил, на нашем сайте установлен All In SEO Pack, поэтому за вывод мете-тегов отвечает именно он.

Приступим к заполнению описаний рубрик сайта грамотным SEO-текстом. Необходимо заранее подготовить хороший текст для рубрик длинной в 150-170 символов, в котором обязательно нужно упомянуть ключевой запрос, по которому планируем продвигать рубрику.

Переходим к описанию рубрик:

Рубрики в Вордпресс

Здесь поочередно редактируем список рубрик, вставляя в поле «Описание» соответствующие тексты.

Добавляем описание рубрики в Вордпресс

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

Мета-тег description у рубрики

Все в порядке, description появился. На всякий случай проверим все рубрики на его наличие.

3. Индивидуальный текстовый блок для рубрики

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

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

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

У меня получилось примерно так: ID=1 — Новости, ID=6 — Статьи, ..., ID=56 — Галерея.

Как узнать ID рубрик? Так же, как и отдельных записей. В разделе «Рубрики» при наведении на ссылку «Редактировать» у выбранной рубрики появится ссылка, содержащая ID (влевом нижнем углу браузера):

Редактирование рубрики

Как узнать ID рубрики Вордпресс

Далее открываем файл шаблона рубрики для редактирования.

Находим место, где заканчивается вывод заголовка рубрики, заголовок выводит функция

single_cat_title

и ниже вставляем следующий фрагмент:

<?php if ( $paged < 2 ) {
// если первая страница рубрики
?>
<?php if ( is_category() ) : ?>
<div id="category-description">
<?php
if (is_category(1)) echo 'Текст для рубрики с ID 1';
if (is_category(56)) echo 'Текст для рубрики с ID 56';
elseif (is_category(77)) echo 'Описание рубрики с ID 77';
?>
</div>
<?php endif; ?>
<?php } else {
// если вторая и последующие страницы рубрики
?>
<?php } ?>

Разберем.
Во-первых, текст для рубрики будет выведен только на первой странице рубрики, все последующие страницы будут без него.

Во-вторых, текстовый блок заключаем в

<div id="category-description">

чтобы придать ему необходимое оформление.

Далее функцией is_category и номером ID соотносим текстовые блоки с рубриками. Если рубрик достаточное количество, то добавляем по аналогии:

if (is_category(1)) echo 'Текст для рубрики с ID 1';
if (is_category(2)) echo 'Текст для рубрики с ID 2';
if (is_category(3)) echo 'Текст для рубрики с ID 3';

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

// если вторая и последующие страницы рубрики

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

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

Успехов в продвижении.

4. Дополнение

В ходе оптимизации рубрик и страниц сайта обнаружилось, что для всех страниц без исключения (и для главной тоже) выходит двойной description.
Повтор description на странице WordPress

Это плохо, поскольку сначала идет «неправильный», а только после него ниже нужный. Откуда взялся еще один «неправильный» description? В результате поиска по форумам, выяснилось, что «неправильный» description генерирует плагин «Social Share Buttons», который автоматически добавляет к записям кнопки социальных сетей. Для того, чтобы это исправить находим в папке плагина «Social Share Buttons» файл «share-buttons-scripts.php» и удалем в нем строку:

echo '<meta name="description" content="'.$descr.'" />';

Сохраняем. Обновляем страницу, видим только один «правильный» description.

Реализация раздела частозадаваемых вопросов

В процессе создания сайта для медицинской клиники возникла необходимость создания раздела, который содержал бы ответы на часто задаваемые вопросы, при чем список вопросов постоянно бы пополнялся.
Главное условие — чтобы вопрос мог быть задан пациентом со страницы сайта. Возможно, эту задачу можно было реализовать стандартными средствами при помощи комментариев, но на данном сайте необходима была страница с полным перечнем вопросов пациентов и ответом врачей. Сегодня подробно рассмотрим реализацию раздела часто задаваемых вопросов в Вордпресс.
Подробнее →