Как создать уникальные метаданные для каждого типа записей WordPress

Метаданные (custom fields) — это важный инструмент для расширения функционала WordPress. Они позволяют добавлять дополнительную информацию к записям, страницам или любым другим типам записей (custom post types). В этой статье мы рассмотрим, как создать уникальные метаданные для каждого типа записей WordPress, используя примеры кода и популярные плагины.

Почему важно создавать уникальные метаданные для разных типов записей

В стандартном WordPress все метаданные хранятся в одной таблице wp_postmeta, но для разных типов записей зачастую нужны разные поля. Например, для товаров WooCommerce нужны поля «артикул», «вес», «цвет», а для отзывов — «оценка», «автор», «дата посещения». Унификация метаданных позволяет:

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

Создание уникальных метаполей через код: пример для пользовательского типа записей

Рассмотрим пример создания метаполей для типа записей wpmax_portfolio. Для этого мы добавим метабокс с двумя полями: «Клиент» и «Дата завершения проекта».

<?php
// Добавляем метабокс
function wpmax_add_portfolio_metabox() {
    add_meta_box(
        'wpmax_portfolio_meta',
        'Данные проекта',
        'wpmax_portfolio_metabox_callback',
        'wpmax_portfolio',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'wpmax_add_portfolio_metabox');

// Выводим HTML метабокса
function wpmax_portfolio_metabox_callback($post) {
    wp_nonce_field('wpmax_portfolio_save', 'wpmax_portfolio_nonce');

    $client = get_post_meta($post->ID, '_wpmax_client', true);
    $completion_date = get_post_meta($post->ID, '_wpmax_completion_date', true);

    echo '<p><label for="wpmax_client">Клиент:</label><br>';
    echo '<input type="text" id="wpmax_client" name="wpmax_client" value="'.esc_attr($client).'" size="25" /></p>';

    echo '<p><label for="wpmax_completion_date">Дата завершения проекта:</label><br>';
    echo '<input type="date" id="wpmax_completion_date" name="wpmax_completion_date" value="'.esc_attr($completion_date).'" /></p>';
}

// Сохраняем данные метаполей
function wpmax_save_portfolio_meta($post_id) {
    if (!isset($_POST['wpmax_portfolio_nonce']) || !wp_verify_nonce($_POST['wpmax_portfolio_nonce'], 'wpmax_portfolio_save')) {
        return;
    }

    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    if (isset($_POST['wpmax_client'])) {
        update_post_meta($post_id, '_wpmax_client', sanitize_text_field($_POST['wpmax_client']));
    }

    if (isset($_POST['wpmax_completion_date'])) {
        update_post_meta($post_id, '_wpmax_completion_date', sanitize_text_field($_POST['wpmax_completion_date']));
    }
}
add_action('save_post', 'wpmax_save_portfolio_meta');
?>

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

Использование плагинов для создания метаполей на примере Meta Box и Advanced Custom Fields

Если вы не хотите писать код вручную, можно использовать популярные плагины для создания метаданных. Рассмотрим два варианта:

Meta Box

Плагин Meta Box позволяет создавать метаполя через интерфейс и программно. Для уникальных метаданных создайте новый метабокс, укажите тип записи и добавьте необходимые поля. Пример программного добавления:

<?php
add_filter('rwmb_meta_boxes', 'wpmax_register_meta_boxes');
function wpmax_register_meta_boxes($meta_boxes) {
    $meta_boxes[] = [
        'title'      => 'Данные проекта',
        'post_types' => 'wpmax_portfolio',
        'fields'     => [
            [
                'id'   => 'client',
                'name' => 'Клиент',
                'type' => 'text',
            ],
            [
                'id'   => 'completion_date',
                'name' => 'Дата завершения проекта',
                'type' => 'date',
            ],
        ],
    ];
    return $meta_boxes;
}
?>

Advanced Custom Fields (ACF)

ACF позволяет создавать группы полей в админке и назначать их на любые типы записей. Для уникальных метаданных создайте группу полей и выберите условие показа для нужного типа записи. В шаблоне вывести значения можно так:

<?php
$client = get_field('client');
$completion_date = get_field('completion_date');

if ($client) {
    echo '<p>Клиент: ' . esc_html($client) . '</p>';
}
if ($completion_date) {
    echo '<p>Дата завершения проекта: ' . esc_html($completion_date) . '</p>';
}
?>

Как использовать уникальные метаданные в шаблонах WordPress

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

Например, для типа записей wpmax_portfolio в файле single-wpmax_portfolio.php можно добавить вывод данных:

<?php
get_header();

if (have_posts()) : while (have_posts()) : the_post();
    the_title('<h1>', '</h1>');

    $client = get_post_meta(get_the_ID(), '_wpmax_client', true);
    $completion_date = get_post_meta(get_the_ID(), '_wpmax_completion_date', true);

    if ($client) {
        echo '<p>&ltstrong>Клиент:</strong> ' . esc_html($client) . '</p>';
    }
    if ($completion_date) {
        echo '<p>&ltstrong>Дата завершения проекта:</strong> ' . esc_html($completion_date) . '</p>';
    }

    the_content();
endwhile; endif;

get_footer();
?>

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

Интеграция с плагином Clearfy Pro для управления метаданными

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

Полезные советы при работе с уникальными метаданными

  • Всегда используйте префиксы в ID метаполей, например _wpmax_, чтобы избежать конфликтов с другими плагинами.
  • Обязательно проверяйте права пользователя и nonce при сохранении данных, чтобы защититься от CSRF-атак.
  • Для даты используйте тип date в HTML, чтобы облегчить ввод и избежать ошибок.
  • Храните данные в стандартизированном формате, чтобы облегчить сортировку и поиск.
  • Используйте кастомные функции с префиксом wpmax_ для обработки метаданных — так будет проще поддерживать код.
Как удалить версию WordPress из HTML и REST API для повышения безопасности
26.12.2025
WooCommerce: как отключить автоматическое обновление статуса заказов
30.04.2026
WooCommerce: как полностью отключить отмену заказов через личный кабинет
04.05.2026
Как использовать хуки в WordPress для автоматизации задач
07.11.2025
WooCommerce: как полностью отключить отмену заказов через личный кабинет
11.05.2026