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

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

Итак, при создании отзывов здесь мы будем двигаться следующим путем:

Шаг 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') название темы для последующего создания файлов перевода.

Чтобы ваш новый тип записи появился в админке, нужно обязательно добавить функцию регистрации с помощью хука add_action('init', 'theme_slug_post_type_testimonials').

А теперь внимание - есть еще один подвох, выделенный в коде выше. Он говорит о том, что данный тип записи (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 не будет опубликован. Обязательные поля помечены *