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

В чем проблема с изменением цены на странице товара в WooCommerce?

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

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

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

  • Откройте страницу товара в браузере.
  • Проверьте наличие полей ввода цены или параметров, влияющих на цену.
  • Откройте консоль разработчика (F12) и попробуйте изменить значение цены в DOM или JS переменных.
  • Если изменение цены отражается в корзине или заказе, значит, контроль цены отсутствует.

Пошаговое решение: запрет изменения цены товара на фронтенде WooCommerce

Чтобы запретить изменение цены на странице товара, можно использовать несколько подходов:

1. Убрать поля изменения цены из формы

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

2. Зафиксировать цену программно с помощью хука woocommerce_before_calculate_totals

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

add_action('woocommerce_before_calculate_totals', 'fix_product_price_in_cart', 10, 1);
function fix_product_price_in_cart($cart) {
    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $regular_price = $product->get_regular_price();
        $cart_item['data']->set_price($regular_price);
    }
}

Этот код устанавливает для каждого товара в корзине цену из основного поля "Обычная цена", игнорируя любые изменения.

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

  1. Очистите кеш браузера и сайта (если используется кеширование).
  2. Откройте страницу товара и попробуйте изменить цену через доступные элементы или консоль.
  3. Добавьте товар в корзину.
  4. Перейдите в корзину — цена должна совпадать с базовой ценой товара, изменения не должны применяться.
  5. Попробуйте оформить заказ, проверяя, что цена заказа соответствует зафиксированной.

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

  • Цена меняется, несмотря на код. Проверьте, что код добавлен в активную тему или плагин, и что нет других плагинов, переопределяющих цену в корзине.
  • Кеширование мешает проверить изменения. Очищайте кеш сайта и браузера.
  • В коде ошибка синтаксиса PHP. Используйте редактор с подсветкой синтаксиса и проверяйте логи сервера.
  • Цена меняется из-за акций или скидок. В этом случае дополнительно отключите фильтры, связанные со скидками, если нужно полностью зафиксировать цену.

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

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

Сравнение способов решения

МетодОписаниеПлюсыМинусы
Удаление полей изменения ценыОтключение элементов на фронтендеПростое и быстрое решениеНе защищает от изменения через консоль и AJAX
Фиксация цены в корзине через хукПринудительное выставление цены на сервереНадежно защищает от любых измененийМожет конфликтовать с плагинами скидок
Комбинированный подходУдаление полей + фиксация ценыМаксимальная защитаТребует тестирования совместимости
Как удалить устаревшие записи и метаданные в WordPress по расписанию
16.02.2026
Автоматическое удаление IP из черного списка в WordPress по времени
27.12.2025
Как удалить мета данные из базы WordPress без плагинов
20.12.2025
Как создать уникальный фильтрованный список постов в WordPress
18.11.2025
Как правильно использовать хуки (actions и filters) в WordPress с примерами кода
08.03.2026