WPTour

WooCommerce: как изменить стоимость товаров после массового импорта

Диагностика проблемы: почему цены не соответствуют ожиданиям после импорта

После массового импорта товаров в WooCommerce часто возникает ситуация, когда цены отображаются некорректно или требуется массовое изменение стоимости (например, добавить наценку, скидку или конвертировать валюту). Причины могут быть следующими:

  • Импортированные цены не учитывают налоговые ставки или скидки.
  • Значения цен импортированы в неправильном формате (например, строка вместо числа).
  • Нужно применить фиксированное изменение цены ко всем товарам или только к части товаров по условию.

Как проверить, что цены импортированы корректно

  • Через админку WooCommerce откройте любой импортированный товар и проверьте поле «Цена» и «Цена со скидкой».
  • Посмотрите в базе данных в таблице wp_postmeta, мета ключи _price, _regular_price, _sale_price.
  • Проверьте на фронтенде, отображается ли цена корректно без ошибок.

Пошаговое решение: массовое изменение цены после импорта

Способ 1: Использование WP-CLI для изменения цен

WP-CLI позволяет быстро обновить цены без загрузки сайта в браузере. Пример скрипта для увеличения цены на 10% у всех товаров:

wp post list --post_type=product --format=ids | xargs -d' ' -I % wp post meta get % _regular_price | \
while read price; do
    new_price=$(echo "$price * 1.1" | bc -l)
    wp post meta update % _regular_price "$new_price"
    wp post meta update % _price "$new_price"
done

Обратите внимание, что этот код нужно запускать с SSH, где есть доступ к WP-CLI и bash.

Способ 2: Сниппет на PHP для функции темы или плагина

Если нет доступа к WP-CLI, можно написать код для массового обновления в functions.php или в отдельном плагине:

function wptour_update_product_prices() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $products = get_posts($args);
    foreach ($products as $product_id) {
        $regular_price = get_post_meta($product_id, '_regular_price', true);
        if (!$regular_price) continue;
        $new_price = round($regular_price * 1.1, 2); // +10%
        update_post_meta($product_id, '_regular_price', $new_price);
        update_post_meta($product_id, '_price', $new_price);
    }
}

// Запустите один раз, потом снимите вызов
add_action('init', 'wptour_update_product_prices');

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

  • Откройте несколько товаров в админке, проверьте поля цены.
  • Перейдите на страницу товара на фронтенде, убедитесь, что цена отображается изменённой.
  • Запустите SQL-запрос в базе для выборки цен: SELECT post_id, meta_value FROM wp_postmeta WHERE meta_key = '_price' LIMIT 10; — проверьте новые значения.

Частые ошибки и как их исправить

  • Цены не изменяются: возможно, код не запускается из-за неправильного хука или отсутствия права на изменение данных. Проверьте логи и используйте отладчик.
  • Ошибки формата цены: цены должны быть числовыми, без символов валюты. Преобразуйте строки в числа с помощью floatval() или round().
  • Обновились только _regular_price, а _price нет: WooCommerce для показа цены использует _price, поэтому его нужно обновлять одновременно.
  • После изменения цены в админке фронтенд не обновляет цену: возможно, включено кэширование. Очистите кэш сайта и браузера.

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

  • Если товаров много (тысячи), разбивайте обновление на партии по 100-200 товаров, чтобы избежать превышения лимита памяти и времени выполнения.
  • Перед массовым обновлением сделайте резервную копию базы, чтобы можно было откатиться.
  • Используйте транзакции или проверяйте результаты обновления, чтобы не потерять данные.
  • Не запускайте массовый скрипт на живом сайте в часы пик, чтобы избежать нагрузки.
  • Для автоматизации подобных задач рассмотрите WP-CLI, он менее ресурсоёмкий, чем PHP-скрипты через браузер.

Сравнение способов массового изменения цены

МетодПреимуществаНедостаткиРекомендации
WP-CLIБыстрое выполнение, низкая нагрузка, подходит для больших сайтовТребуется доступ к серверу и консолиИспользовать для профессиональных администраторов
PHP скрипт в теме/плагинеМожно запустить из админки, не нужен доступ к серверуРиск превышения лимитов, может замедлить сайтЗапускать на небольших сайтах или тестовых окружениях
Плагины для массового редактированияУдобный интерфейс, дополнительные фильтрыМогут быть платными, нагрузка на сайтИспользовать если не умеете писать код
×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙