Работа с 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.