Вы здесь: Главная » Wordpress » Создание пользовательских типов записей в WordPress на примере отзывов

Создание пользовательских типов записей в WordPress на примере отзывов

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

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

Шаг 1. Регистрируем тип записи с названием testimonial.

Вы можете регистрировать тип записи в файле functions.php. Однако этот файл, как правило, содержит массу разных функций, которые далеко не всегда связаны друг с другом. Поэтому имеет смысл вынести вседействия, связанные с вашим типом записи в отдельный файл и даже в отдельную директорию. Довольно часто для различных добавочных файлов в теме используют папку inc (от англ. include - включать). Сам файл можно назвать post-types.php.

Обязательно нужно указать в functions.php, что вы загружаете этот файл для работы с ним в теме:

В том случве, если вы создаете пользовательский тип записи для дочерней темы WordPress, вам нужно изменить пути к папкам, т.к. функции get_template_directory() и get_template_directory_uri() ведут  к каталогу основной (родительской) темы, в которой указанного файла нет.

Теперь вы можете быть уверены, что ваш новый тип записи будет отображен в админке.

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

В том случае, когда у вас сайт на одном языке, вы можете сразу же указывать название типов записей и таксономий на языке сайта. Если сайт мультиязычный, лучше использовать функцию __('name', 'theme-name') название темы для последующего создания файлов перевода.

А теперь внимание - есть еще один подвох, выделенный в коде выше. Он говорит о том, что данный тип записи (testimonials) поддерживает таксономию 'testimonial_category' . По сути дела это категории для ваших отзывов, которые могут выводится в разных местах темы. Таксономии тоже нужно регистрировать.

Для того, чтобы у вас не было проблем с таксономиями, регистрировать (описывать) их нужно ДО того, как вы регистрируете тип записи функцией register_post_type().

Код будет теперь таким:

Теперь мы можем заглянуть в админку и увидеть наш тип записи:

testimonials post type

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

Шаг 2. Регистрируем мета-бокс

Как правило, тех полей, которые мы можем добавить по умолчанию, а это заголовок записи, изображение и текстовая область для контента, бывает недостаточно. В этой статье мы будем добавлять отзывы для сайта курсов по психологии. Поэтому в заголовке мы будем указывать автора отзыва, в области контента поместим сам отзыв, изображение будем использовать в качестве изображения автора отзыва (возьмем их с сайта unsplash.com). Курс - это таксономия (категория) отзывов. Но нам нужно еще указать преподавателя курса. Для этого нам понадобится дополнительное поле (meta_box в терминологии WordPress).

Для этого в массив $args добавим строку 'register_meta_box_cb' => 'register_meta_box', а затем пропишем функции, которые регистрируют это мета-поле, а также сохраняют днные из этого поля и обновляют их.

Теперь можем добавить отзывы в админке сайта.

Шаг 3. Добавляем отзывы

В результате у нас появится возможность создавать новые записи типа testimonial, о чем свидетельствует постоянная ссылка.

testimonials post type

Шаг 4. Создаем файл для отображения одного отзыва

Важно: после создания нового типа записи обязательно нужно зайти на страницу Настройки → Постоянные ссылки. Нужно это для того, чтобы правила ЧПУ были пересозданы и туда были добавлены правила нового типа записи. Если вы этого не сделаете, потом не сможете просмотреть страницу с отзывом или с таксономией.

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

Если же нам нужен какой-то особый вид, то нужно создать специальный файл. Его название должно быть вида single-{post_type}.php. То есть для типа записи (post_type) testimonial должен быть файл с названием single-testimonial.php с нужным вам содержимым.

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

В коде на строке 7 использована функция get_template_part(). Она подразумевает, что в папке 'inc' нашей темы находится файл testimonial.php. Код в нем будет примерно таким:

С простыми стилями для блока отзыва наш файл single-testimonial.php выглядит так:Файл single-testimonial.php

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

Шаг 5. Добавляем файл таксономии

Для того чтобы ссылка на курс в предыдущем нашем файле single-testimonial.php работала, нам понадобится файл, который выводит все данные теаксономии (категории отзывов). Для этого мы создадим в теме файл taxonomy-testimonial_category.php.

Он будет выводить отзывы одной категории. Код файла:

Здесь мы также используем файл из папки inc, но уже с названием one-testimonial.php. Его код похож на код файла testimonial.php, но без ссылки на категорию:

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

Шаг 6. Файлы переводов

Поскольку мы писали код преимущественно на английском языке, а сайт у нас может быть на любом языке, то нам необходимо создать файл перевода. Для этого можно использовать программу PoEdit. Файлы перевода сохраняются в папку languages, которая должна быть в вашей теме.

Переводу подлежат все строки, который были "обернуты" в специальные функции WordPress  __('Testimonials', 'theme-name' ) (если не предполагается сразу вывод информации), или _e( 'Teacher Name', 'theme-name' );, если нужно выводить соответствующий текст в теме. 'theme-name' - это название вашей темы, которое также указывается в файле functions.php темы в строке load_theme_textdomain( 'theme-name', THEME_DIR . '/languages' );.

Эти функции PoEdit находит и собирает в файл, который затем сохраняется с расирением .pot и названием вашей темы.

Добавляем файл перевода

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

Сохранение перевода

Теперь можно еще раз посмотреть на то, как отображаются записи типа Testimonials в админке WordPress. Если все сделано верно, то все англоязычные названия поменяются на те, что были в вашем переводе.

Перевод в админке

Автор: Админ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *