Как добавить уникальные метаданные для продуктов WooCommerce и вывести их на страницу товара

Работа с WooCommerce часто требует добавления дополнительной информации к товарам, которая не предусмотрена стандартным функционалом. Это могут быть уникальные характеристики, специальные метки, дополнительные инструкции и прочее. В этой статье разберём как добавить уникальные метаданные для продуктов WooCommerce, сохранить их, а затем вывести на страницу товара.

Что такое метаданные в WooCommerce и зачем они нужны

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

Например, если вы продаёте электронику, можно добавить поле «Гарантийный срок», которое будет отображаться рядом с описанием товара. Или, например, поле с инструкцией по использованию, которую удобно выводить прямо на странице товара.

Использование метаданных повышает информативность сайта и помогает клиентам принимать решение о покупке.

Как WooCommerce хранит метаданные

Метаданные товаров хранятся в таблице wp_postmeta и связаны с ID товара (поста). Для добавления и получения метаданных используется стандартный API WordPress: функции update_post_meta, get_post_meta и delete_post_meta.

Добавление уникальных метаданных в административной панели

Для удобства добавления новых полей к продуктам создадим мета-бокс на странице редактирования товара. В этом мета-боксе администратор сможет вводить нужные данные.

Создаём мета-бокс

add_action('add_meta_boxes', 'wpbuy_add_custom_product_meta_box');
function wpbuy_add_custom_product_meta_box() {
    add_meta_box(
        'wpbuy_product_custom_meta',
        'Дополнительные метаданные',
        'wpbuy_custom_product_meta_box_callback',
        'product',
        'normal',
        'high'
    );
}

function wpbuy_custom_product_meta_box_callback($post) {
    wp_nonce_field('wpbuy_save_custom_product_meta', 'wpbuy_custom_product_meta_nonce');

    $warranty = get_post_meta($post->ID, '_wpbuy_product_warranty', true);
    $instructions = get_post_meta($post->ID, '_wpbuy_product_instructions', true);

    echo '<p><label for="wpbuy_product_warranty">Гарантийный срок (месяцев):</label><br />';
    echo '<input type="number" id="wpbuy_product_warranty" name="wpbuy_product_warranty" value="' . esc_attr($warranty) . '" min="0" /></p>';

    echo '<p><label for="wpbuy_product_instructions">Инструкция по использованию:</label><br />';
    echo '<textarea id="wpbuy_product_instructions" name="wpbuy_product_instructions" rows="4" cols="50">' . esc_textarea($instructions) . '</textarea></p>';
}

Этот код добавит два поля: для гарантийного срока и для инструкции. Важно использовать префикс _wpbuy_ чтобы избежать коллизий с другими метаданными.

Сохраняем метаданные при сохранении товара

add_action('save_post', 'wpbuy_save_custom_product_meta');
function wpbuy_save_custom_product_meta($post_id) {
    if (!isset($_POST['wpbuy_custom_product_meta_nonce']) || !wp_verify_nonce($_POST['wpbuy_custom_product_meta_nonce'], 'wpbuy_save_custom_product_meta')) {
        return;
    }

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

    if (isset($_POST['wpbuy_product_warranty'])) {
        $warranty = intval($_POST['wpbuy_product_warranty']);
        update_post_meta($post_id, '_wpbuy_product_warranty', $warranty);
    }

    if (isset($_POST['wpbuy_product_instructions'])) {
        $instructions = sanitize_textarea_field($_POST['wpbuy_product_instructions']);
        update_post_meta($post_id, '_wpbuy_product_instructions', $instructions);
    }
}

Так мы защитим данные от CSRF-атак и сохраним введённые значения корректно.

Вывод уникальных метаданных на странице товара

Теперь, когда метаданные сохраняются, нужно вывести их в шаблоне товара. Для этого добавим вывод в нужное место, например, под ценой или описанием.

Добавляем вывод метаданных через хук WooCommerce

add_action('woocommerce_single_product_summary', 'wpbuy_show_custom_product_meta', 25);
function wpbuy_show_custom_product_meta() {
    global $product;
    $product_id = $product->get_id();

    $warranty = get_post_meta($product_id, '_wpbuy_product_warranty', true);
    $instructions = get_post_meta($product_id, '_wpbuy_product_instructions', true);

    if ($warranty) {
        echo '<p><strong>Гарантийный срок:</strong> ' . esc_html($warranty) . ' месяцев</p>';
    }

    if ($instructions) {
        echo '<div><strong>Инструкция по использованию:</strong><br />' . wp_kses_post(wpautop($instructions)) . '</div>';
    }
}

Этот код выведет дополнительные поля в блоке с описанием товара. Для оформления можно добавить стили в CSS темы.

Советы по оптимизации и рекомендации

1. Используйте префиксы для своих метаполей, чтобы избежать конфликтов с другими плагинами и темами.
2. Для текстовых полей применяйте фильтрацию и экранирование, чтобы защититься от XSS.
3. Если метаданных много, рассмотрите их сохранение в виде сериализованных массивов или отдельной пользовательской таблицы для повышения производительности.
4. Используйте AJAX для динамического обновления метаданных без перезагрузки страницы — это улучшит UX.

Пример AJAX-обновления метаданных

Для продвинутого варианта можно реализовать сохранение гарантийного срока без перезагрузки страницы:

add_action('wp_ajax_wpbuy_save_warranty', 'wpbuy_save_warranty_ajax');
function wpbuy_save_warranty_ajax() {
    if (!current_user_can('edit_products')) {
        wp_send_json_error('Недостаточно прав');
    }
    $product_id = intval($_POST['product_id']);
    $warranty = intval($_POST['warranty']);
    if ($product_id && $warranty >= 0) {
        update_post_meta($product_id, '_wpbuy_product_warranty', $warranty);
        wp_send_json_success('Сохранено');
    } else {
        wp_send_json_error('Неверные данные');
    }
}

На стороне JavaScript вы можете отправлять запрос с помощью fetch или jQuery.ajax с nonce для защиты.

Альтернативные плагины для работы с метаполями WooCommerce

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

  • Advanced Custom Fields (ACF) — очень популярный плагин для добавления любых пользовательских полей.
  • WooCommerce Extra Product Options — для расширенного управления опциями товара.
  • Clearfy Pro — оптимизация и настройка WooCommerce, в том числе удобное управление метаполями.

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

Итог

Добавление уникальных метаданных в WooCommerce — мощный способ расширить магазин и дать покупателям больше информации. Используя приведённые примеры кода, вы сможете создавать удобные интерфейсы для администраторов и красиво выводить данные на сайте. Для более сложных задач рекомендуем изучить плагины с расширенными возможностями, например, Advanced Custom Fields или Clearfy Pro.

Как автоматизировать вывод отзывов в WordPress с помощью Expert Review
15.03.2026
Как создать многоуровневую навигацию в WordPress с поддержкой AJAX
04.01.2026
Как создать свой шорткод в WordPress с примером кода
10.11.2025
WooCommerce: автоматическое отключение товаров без остатков на складе
09.06.2026
WooCommerce: как автоматически удалять неактивные заказы
23.04.2026