WPExperts

Как создать собственный Post Type в WordPress

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

Что такое Post Type и зачем он нужен в WordPress

По умолчанию WordPress использует несколько типов записей: post (записи), page (страницы), attachment (вложения) и несколько системных типов. Создание собственного Post Type позволяет определить новый тип контента, например, «Портфолио», «Отзывы», «События» и т.д. Это особенно полезно для сайтов с нестандартной структурой контента.

Преимущества пользовательских Post Type:

  • Отдельная админ-панель и управление.
  • Возможность использовать собственные таксономии и мета-поля.
  • Улучшение SEO за счет правильной структуры URL и контента.
  • Удобство для редакторов и администраторов сайта.

Рассмотрим, как создать собственный Post Type на примере сайта с доменом wpexperts.ru.

Регистрация собственного Post Type в functions.php

Для создания нового Post Type нужно использовать функцию register_post_type. Рекомендуется добавлять код в файл functions.php вашей дочерней темы или в плагин для кастомных функций. Вот пример создания Post Type «Отзывы».

function wpexperts_register_post_type_reviews() {
    $labels = array(
        'name' => 'Отзывы',
        'singular_name' => 'Отзыв',
        'add_new' => 'Добавить отзыв',
        'add_new_item' => 'Добавить новый отзыв',
        'edit_item' => 'Редактировать отзыв',
        'new_item' => 'Новый отзыв',
        'view_item' => 'Посмотреть отзыв',
        'search_items' => 'Поиск отзывов',
        'not_found' => 'Отзывы не найдены',
        'not_found_in_trash' => 'В корзине отзывы не найдены',
        'menu_name' => 'Отзывы'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'reviews'),
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'comments'),
        'show_in_rest' => true, // Включаем поддержку Gutenberg
        'menu_position' => 5,
        'menu_icon' => 'dashicons-admin-comments'
    );

    register_post_type('wpexperts_review', $args);
}
add_action('init', 'wpexperts_register_post_type_reviews');

В этом коде мы определили новый тип записей с названием wpexperts_review. Обратите внимание на параметр show_in_rest, который необходим для поддержки редактора Gutenberg и REST API.

Создаем кастомные таксономии для собственного Post Type

Для удобной классификации записей нового типа полезно создать собственные таксономии — например, категории или теги, специально для «Отзывы».

Пример регистрации таксономии «Тип отзыва»:

function wpexperts_register_taxonomy_review_type() {
    $labels = array(
        'name' => 'Типы отзывов',
        'singular_name' => 'Тип отзыва',
        'search_items' => 'Поиск типов отзывов',
        'all_items' => 'Все типы отзывов',
        'edit_item' => 'Редактировать тип отзыва',
        'add_new_item' => 'Добавить новый тип отзыва',
        'menu_name' => 'Типы отзывов'
    );

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

    register_taxonomy('wpexperts_review_type', array('wpexperts_review'), $args);
}
add_action('init', 'wpexperts_register_taxonomy_review_type');

Теперь в админке при редактировании отзывов появится новая таксономия «Типы отзывов». Благодаря этому можно гибко фильтровать и группировать отзывы по типам.

Вывод пользовательского Post Type на сайте

Чтобы вывести записи нового Post Type на сайте, можно создать отдельный шаблон архива archive-wpexperts_review.php в теме. Если шаблон не создан, WordPress попытается использовать archive.php или index.php.

Пример простого шаблона архива с выводом заголовков и ссылок на отзывы:

<?php get_header(); ?>
<div class="content-area">
    <main class="site-main" role="main">
        <h1>Отзывы наших клиентов</h1>
        <?php if (have_posts()) : ?>
            <ul>
            <?php while (have_posts()) : the_post(); ?>
                <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
            <?php endwhile; ?>
            </ul>
        <?php else : ?>
            <p>Отзывов пока нет.</p>
        <?php endif; ?>
    </main>
</div>
<?php get_footer(); ?>

Для более сложного вывода можно добавить мета-поля и использовать их в шаблонах.

Плагины для управления собственными Post Type и таксономиями

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

  • Custom Post Type UI — позволяет создавать Post Type и таксономии через удобный интерфейс без написания кода.
  • Advanced Custom Fields (ACF) — отличный плагин для добавления мета-полей к вашим типам записей.
  • Pods — мощный инструмент для создания и управления кастомным контентом и связями между ним.

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

Советы по оптимизации и безопасности пользовательских Post Type

При создании Post Type важно учесть несколько аспектов:

  • Уникальный префикс — используйте префиксы (например, wpexperts_) для всех функций и типов, чтобы избежать конфликтов с другими плагинами.
  • Регистрация на хук init — все Post Type и таксономии регистрируйте на событии init.
  • Права доступа — контролируйте правами, кто может создавать, редактировать и удалять записи нового типа через параметры capability_type и capabilities.
  • Оптимизация запросов — если вы используете WP_Query для выборки записей, обязательно оптимизируйте запросы с помощью параметров posts_per_page, orderby и кэширования.

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

×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙