WooCommerce: как запретить изменение цены товара на странице продукта

Диагностика проблемы: почему нужно запретить изменение цены

В стандартном WooCommerce цена товара на странице продукта отображается статично, но при использовании некоторых тем, плагинов или кастомных скриптов возможно изменение цены через интерфейс (например, при кастомизации, количественных скидках или опциях). Это может привести к некорректному отображению цены и ошибкам в заказах. Часто владельцы магазинов сталкиваются с тем, что пользователи могут изменить цену через инструменты разработчика или скрипты, что нарушает логику ценообразования.

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

  • Откройте страницу товара в браузере.
  • Используйте инструменты разработчика (F12) и перейдите в консоль.
  • Найдите HTML-элемент с классом price или .woocommerce-Price-amount.
  • Попробуйте вручную изменить значение или проверить, есть ли скрипты, влияющие на цену.
  • Если цена динамически меняется при выборе опций или количества, это может указывать на проблему.

Пошаговое решение: блокируем изменение цены через код

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

<?php
// Отключаем скрипты, которые могут менять цену
add_action('wp_enqueue_scripts', function() {
    if (is_product()) {
        wp_dequeue_script('wc-price-slider'); // пример скрипта, который меняет цену
        // Добавьте сюда другие скрипты, которые влияют на цену
    }
});

// Фильтр для предотвращения изменения цены программно
add_filter('woocommerce_product_get_price', 'fix_product_price', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'fix_product_price', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'fix_product_price', 10, 2);

function fix_product_price($price, $product) {
    // Возвращаем оригинальную цену из мета
    return $product->get_meta('_original_price') ?: $price;
}

// При сохранении товара сохраняем оригинальную цену
add_action('woocommerce_process_product_meta', function($post_id) {
    $product = wc_get_product($post_id);
    if ($product) {
        update_post_meta($post_id, '_original_price', $product->get_price());
    }
});
?>

Этот код сохраняет оригинальную цену при сохранении товара и всегда возвращает именно её, игнорируя любые попытки изменить её динамически.

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

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

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

  • Ошибка: Цена меняется при выборе опций.
    Причина: Плагины или темы добавляют скрипты динамического изменения.
    Решение: Отключите такие скрипты через wp_dequeue_script или настройте плагин.
  • Ошибка: Цена в админке не сохраняется.
    Причина: Неправильное использование хуков сохранения.
    Решение: Используйте woocommerce_process_product_meta для сохранения оригинальной цены.
  • Ошибка: Кэширование мешает увидеть изменения.
    Решение: Очистите кэш сайта и браузера, отключите плагин кэширования при тестах.

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

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

Таблица сравнения способов блокировки изменения цены

МетодПлюсыМинусыКогда использовать
Отключение скриптов (wp_dequeue_script)Простой и быстрый способМожет нарушить функционал других плагиновЕсли известны конкретные скрипты, влияющие на цену
Фильтры цены (woocommerce_product_get_price)Гарантированно возвращает корректную ценуНужно хранить оригинальную ценуДля защиты от любых изменений на сервере
Отключение редактирования в админкеПростое решение для фиксированных ценМеньше гибкости для админаЕсли цена всегда должна быть фиксированной
Как удалить устаревшие записи и метаданные в WordPress по расписанию
16.02.2026
Автоматическое удаление IP из черного списка в WordPress по времени
27.12.2025
Как удалить старые и неиспользуемые медиа файлы в WordPress: практические методы и примеры
24.03.2026
Как удалить или скрыть версию WordPress без плагинов
06.02.2026
Как создавать динамические скрипты в WordPress с примерами кода
10.12.2025