Знаете, что общего у WordPress и шведского стола? Огромный выбор возможностей, где каждый берет то, что ему по вкусу. Но если вы до сих пор работаете только с постами и страницами, то поздравляю, вы как тот человек, который пришел в «шведку» и съел только хлеб. Сегодня я научу вас готовить полноценное блюдо из кастомных типов записей (CPT) и таксономий, чтобы вы могли создать свой шедевр.

Почему вообще заморачиваться?

Если вы думали, что WordPress — это просто платформа для блогов, то я уже на полпути к тому, чтобы спасти вас от этого заблуждения. Кастомные типы записей позволяют создавать всё что угодно: от портфолио для дизайнеров до базы данных для видеоигр. А таксономии помогут всё это разложить по полочкам. Это как в вашей квартире — с ними перестаёте путать носки с зарядками.

И вот тут начинается магия. Вы больше не ограничены стандартными «Записями» и «Страницами». Теперь у вас есть возможность сделать что-то уникальное. И да, это не так сложно, как может показаться.


Шаг первый: Освойте register_post_type

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

Вот пример кода для создания кастомного типа записи:

function create_movie_post_type() {
    register_post_type('movie',
        array(
            'labels' => array(
                'name' => __('Фильмы'),
                'singular_name' => __('Фильм'),
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'movies'),
            'supports' => array('title', 'editor', 'thumbnail'),
        )
    );
}
add_action('init', 'create_movie_post_type');

Что здесь происходит?

  • register_post_type — это ваш волшебный ключ, открывающий дверь в мир кастомных записей.
  • labels — подписи, которые видят пользователи и админ.
  • public — значит, запись будет доступна и в админке, и на сайте.
  • has_archive — позволит создать архив типа site.com/movies.
  • supports — указывает, какие элементы записи будут доступны (например, заголовок, текст, картинка).

Добавили? Проверьте в админке — должен появиться новый пункт меню «Фильмы».


Шаг второй: Наведи порядок с помощью таксономий

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

function create_movie_taxonomy() {
    register_taxonomy(
        'genre',
        'movie',
        array(
            'labels' => array(
                'name' => __('Жанры'),
                'singular_name' => __('Жанр'),
            ),
            'hierarchical' => true,
            'rewrite' => array('slug' => 'genre'),
        )
    );
}
add_action('init', 'create_movie_taxonomy');

Что здесь важно:

  • hierarchical — если установите true, таксономия будет работать как категории (с древовидной структурой). Если false — как теги.
  • slug — то, что вы увидите в URL.

Теперь у каждого фильма можно будет выбрать жанр. Стильно, удобно и никакого хаоса.


Шаг третий: Добавь магии в админку

Хотите, чтобы ваш клиент (или вы сами) не страдали от интерфейса? Добавьте в админку метабоксы. Например, чтобы указывать рейтинг фильма:

function add_movie_metabox() {
    add_meta_box(
        'movie_rating',
        'Рейтинг фильма',
        'movie_rating_callback',
        'movie',
        'side'
    );
}

function movie_rating_callback($post) {
    $value = get_post_meta($post->ID, '_movie_rating', true);
    echo '<label for="movie_rating">Рейтинг (1-10): </label>';
    echo '<input type="number" id="movie_rating" name="movie_rating" value="' . esc_attr($value) . '" min="1" max="10" />';
}

add_action('add_meta_boxes', 'add_movie_metabox');

function save_movie_rating($post_id) {
    if (array_key_exists('movie_rating', $_POST)) {
        update_post_meta(
            $post_id,
            '_movie_rating',
            $_POST['movie_rating']
        );
    }
}
add_action('save_post', 'save_movie_rating');

Теперь у каждой записи типа «Фильм» в админке появится поле для указания рейтинга. Вы не только разрабатываете, но и уважаете тех, кто будет пользоваться вашим продуктом.


Шаг четвертый: Создайте кастомный вывод на фронтенде

Да, можно просто вывести всё через стандартный цикл WordPress. Но зачем быть посредственным, когда можно сделать красиво? Вот пример для вывода фильмов на странице:

$args = array(
    'post_type' => 'movie',
    'posts_per_page' => 10,
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<p>' . get_the_content() . '</p>';
        echo '<p>Рейтинг: ' . get_post_meta(get_the_ID(), '_movie_rating', true) . '</p>';
    }
    wp_reset_postdata();
} else {
    echo 'Фильмы не найдены.';
}

Этот код выводит 10 фильмов с их названием, описанием и рейтингом. Простенько, но со вкусом.


Итог: стань мастером кастомизации

Если вы хотите стать профи в 2024–2025 годах, забудьте о ленивых плагинах. Настоящие мастера пишут кастомный код, который выглядит чисто и работает как швейцарские часы. Да, вам придётся потратить время на обучение, но потом сможете гордо заявлять, что WordPress — это ваш холст, а не готовый шаблон.

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