Создание плагина для WordPress: Добавление нового типа записей с выводом шаблонов страниц и категорий

WordPress — это мощная CMS, которая предоставляет разработчикам возможность расширять функциональность сайта с помощью плагинов. Одним из таких расширений может быть создание нового типа записей (Custom Post Type), который позволит организовать контент более гибко. В этой статье мы рассмотрим, как создать плагин, который добавит новый тип записей, а также настроит вывод соответствующих шаблонов для страниц и категорий.


Шаг 1: Создание базовой структуры плагина

Для начала создадим файл плагина. Пусть он будет называться custom-post-type-plugin.php. Этот файл должен находиться в папке плагина, например, /wp-content/plugins/custom-post-type-plugin/.

<?php
/**
 * Plugin Name: Custom Post Type Plugin
 * Description: Плагин для создания нового типа записей с выводом шаблонов страниц и категорий.
 * Version: 1.0
 * Author: Ваше имя
 */

if (!defined('ABSPATH')) {
    exit; // Защита от прямого доступа к файлу
}

Шаг 2: Регистрация нового типа записей

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

Добавьте следующий код в файл плагина:

function cptp_register_book_post_type() {
    $labels = array(
        'name'               => __('Книги', 'cptp'),
        'singular_name'      => __('Книга', 'cptp'),
        'menu_name'          => __('Книги', 'cptp'),
        'name_admin_bar'     => __('Книга', 'cptp'),
        'add_new'            => __('Добавить новую', 'cptp'),
        'add_new_item'       => __('Добавить новую книгу', 'cptp'),
        'new_item'           => __('Новая книга', 'cptp'),
        'edit_item'          => __('Редактировать книгу', 'cptp'),
        'view_item'          => __('Просмотреть книгу', 'cptp'),
        'all_items'          => __('Все книги', 'cptp'),
        'search_items'       => __('Поиск книг', 'cptp'),
        'not_found'          => __('Книг не найдено', 'cptp'),
        'not_found_in_trash' => __('В корзине книг не найдено', 'cptp'),
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'rewrite'            => array('slug' => 'books'),
        'supports'           => array('title', 'editor', 'thumbnail', 'excerpt'),
        'menu_icon'          => 'dashicons-book',
    );

    register_post_type('book', $args);
}
add_action('init', 'cptp_register_book_post_type');

Объяснение:

  • labels: Определяет текстовые метки для типа записей.
  • public: Делает тип записей доступным для публичного просмотра.
  • has_archive: Включает архивную страницу для типа записей.
  • rewrite: Задает URL-структуру (например, example.com/books/).
  • supports: Определяет, какие функции поддерживаются (заголовок, редактор, миниатюра и т.д.).

Шаг 3: Регистрация таксономии для категорий

Чтобы организовать книги по категориям, добавим таксономию genre (жанр).

function cptp_register_genre_taxonomy() {
    $labels = array(
        'name'              => __('Жанры', 'cptp'),
        'singular_name'     => __('Жанр', 'cptp'),
        'search_items'      => __('Поиск жанров', 'cptp'),
        'all_items'         => __('Все жанры', 'cptp'),
        'parent_item'       => __('Родительский жанр', 'cptp'),
        'parent_item_colon' => __('Родительский жанр:', 'cptp'),
        'edit_item'         => __('Редактировать жанр', 'cptp'),
        'update_item'       => __('Обновить жанр', 'cptp'),
        'add_new_item'      => __('Добавить новый жанр', 'cptp'),
        'new_item_name'     => __('Название нового жанра', 'cptp'),
        'menu_name'         => __('Жанры', 'cptp'),
    );

    $args = array(
        'hierarchical'      => true, // Как категории
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array('slug' => 'genre'),
    );

    register_taxonomy('genre', array('book'), $args);
}
add_action('init', 'cptp_register_genre_taxonomy');

Объяснение:

  • hierarchical: Указывает, что таксономия является иерархической (как категории).
  • rewrite: Задает URL-структуру для таксономии (например, example.com/genre/fantasy/).

Шаг 4: Создание шаблонов для вывода

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

1. Шаблон для одной записи (single-book.php)

Создайте файл single-book.php в папке вашей темы:

<?php
get_header();

while (have_posts()) : the_post();
    ?>
    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <header class="entry-header">
            <h1><?php the_title(); ?></h1>
        </header>

        <div class="entry-content">
            <?php the_content(); ?>
        </div>
    </article>
    <?php
endwhile;

get_footer();

2. Шаблон для архива записей (archive-book.php)

Создайте файл archive-book.php:

<?php
get_header();

if (have_posts()) :
    while (have_posts()) : the_post();
        ?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div><?php the_excerpt(); ?></div>
        </article>
        <?php
    endwhile;
else :
    echo '<p>Записей нет.</p>';
endif;

get_footer();

3. Шаблон для таксономии (taxonomy-genre.php)

Создайте файл taxonomy-genre.php:

<?php
get_header();

$term = get_queried_object();
?>
<h1>Жанр: <?php echo esc_html($term->name); ?></h1>

<?php
if (have_posts()) :
    while (have_posts()) : the_post();
        ?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div><?php the_excerpt(); ?></div>
        </article>
        <?php
    endwhile;
else :
    echo '<p>Записей в этом жанре нет.</p>';
endif;

get_footer();

Шаг 5: Активация плагина

  1. Перейдите в админ-панель WordPress.
  2. Перейдите в раздел “Плагины” → “Установленные плагины”.
  3. Найдите плагин “Custom Post Type Plugin” и активируйте его.

Теперь у вас есть новый тип записей “Книги” с возможностью добавления категорий (жанров). Вы можете создавать новые записи, назначать им жанры и просматривать их на сайте.


Заключение

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

Если у вас возникнут вопросы или потребуется помощь, не стесняйтесь обращаться!