Диагностика задачи: зачем нужны кастомные колонки в WooCommerce
Стандартный список товаров WooCommerce отображает ограниченный набор колонок: название, цена, наличие и т.д. Для удобного управления большим ассортиментом часто необходимо добавить собственные колонки с метаданными, например, артикул производителя, статус проверки качества или внутренние комментарии. Это ускоряет работу менеджера и позволяет не заходить в каждый товар отдельно.
Добавляем кастомные колонки: пошаговое решение
1. Добавление новой колонки
Используйте фильтр manage_edit-product_columns для добавления колонки в таблицу продуктов на странице администратора.
add_filter('manage_edit-product_columns', 'wphost_add_custom_product_column');
function wphost_add_custom_product_column($columns) {
// Вставляем новую колонку после 'price'
$new_columns = array();
foreach ($columns as $key => $value) {
$new_columns[$key] = $value;
if ($key === 'price') {
$new_columns['custom_sku'] = 'Артикул производителя';
}
}
return $new_columns;
}2. Заполнение данных в кастомной колонке
Чтобы вывести данные, используйте хук manage_product_posts_custom_column. Здесь мы получим мета-данные товара по ключу _custom_sku.
add_action('manage_product_posts_custom_column', 'wphost_fill_custom_product_column', 10, 2);
function wphost_fill_custom_product_column($column, $post_id) {
if ($column === 'custom_sku') {
$custom_sku = get_post_meta($post_id, '_custom_sku', true);
echo $custom_sku ? esc_html($custom_sku) : '—';
}
}3. Добавление поля для ввода артикула в админку товара
Чтобы заполнить мета-данные _custom_sku, добавим поле в мета-бокс редактирования товара.
add_action('woocommerce_product_options_general_product_data', 'wphost_add_custom_sku_field');
function wphost_add_custom_sku_field() {
woocommerce_wp_text_input(array(
'id' => '_custom_sku',
'label' => 'Артикул производителя',
'desc_tip' => true,
'description' => 'Введите артикул производителя для этого товара.',
));
}
add_action('woocommerce_process_product_meta', 'wphost_save_custom_sku_field');
function wphost_save_custom_sku_field($post_id) {
$custom_sku = isset($_POST['_custom_sku']) ? sanitize_text_field($_POST['_custom_sku']) : '';
update_post_meta($post_id, '_custom_sku', $custom_sku);
}Проверка результата после внедрения
После добавления кода:
- Перейдите в админку WooCommerce → Товары.
- Убедитесь, что появилась новая колонка «Артикул производителя» после цены.
- Откройте любой товар на редактирование и заполните поле «Артикул производителя».
- Сохраните товар и проверьте, что введённый артикул отображается в новой колонке.
Частые ошибки и как их исправить
- Колонка не появляется — проверьте правильность названия хука
manage_edit-product_columnsи что код добавлен в functions.php активной темы или в плагин. - Данные не сохраняются — убедитесь, что функция сохранения привязана к
woocommerce_process_product_metaи что в форме нет ошибок. - Отображается пустая ячейка — проверьте, что мета-ключ
_custom_skuзаполнен и что используется функцияget_post_metaс правильным ID товара.
Практические советы по безопасности и производительности
- Используйте
sanitize_text_field()при сохранении пользовательских данных, чтобы исключить XSS-уязвимости. - Минимизируйте количество кастомных колонок, чтобы не замедлять загрузку страницы списка товаров.
- Если добавляете много колонок с метаданными, рассмотрите использование кэширования результатов для ускорения отображения.
Сравнение способов добавления кастомных данных в WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Код (фильтры и экшены) | Добавление колонок и полей через хуки WooCommerce | Быстро, гибко, нет плагинов | Требует навыков, возможны ошибки |
| Плагины (например, Admin Columns) | Графический интерфейс для добавления колонок и управления ими | Просто, много функций, поддержка | Нагрузка на сайт, дополнительные обновления |
| Кастомные таблицы в базе | Хранение данных отдельно от постмета | Производительно при большом объеме данных | Сложно в реализации, требует поддержки |