wpforms.ru wordpress WPForms.ru

WPForms и WooCommerce: автоматическая подстановка цен и наличия товаров в форму

Диагностика задачи: зачем нужна автоматическая подстановка цен и остатков в WPForms

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

Проблема в том, что по умолчанию WPForms не умеет динамически подтягивать эти данные из каталога WooCommerce, и приходится делать это вручную или использовать сторонние плагины с ограничениями.

Как проверить текущее состояние и подготовить среду

  • Убедитесь, что установлены и активированы WPForms и WooCommerce последней версии.
  • Создайте тестовый товар в WooCommerce с уникальным артикулом, ценой и количеством на складе.
  • Создайте форму WPForms с полями для отображения цены (числовое поле) и наличия (текстовое поле).
  • Включите режим отладки в WordPress (define('WP_DEBUG', true);) для мониторинга ошибок.

Пошаговое решение: динамическая подстановка цены и наличия по ID товара

1. Добавление пользовательских полей для ID товара в форме

Добавьте в форму скрытое поле, куда будет передаваться ID товара (например, через GET-параметр или shortcode с параметром). Это позволит однозначно идентифицировать товар.

2. Подключение PHP-кода для подстановки данных из WooCommerce

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

add_filter('wpforms_process_before_form_data', function( $form_data, $fields, $entry, $form_id ) {
    // Проверяем ID формы, чтобы не влиять на все формы
    if ( $form_id !== 123 ) { // замените 123 на ID вашей формы
        return $form_data;
    }

    // Получаем ID товара из поля формы (например, поле с ключом 'product_id')
    $product_id = isset( $_POST['wpforms']['fields']['product_id'] ) ? intval( $_POST['wpforms']['fields']['product_id'] ) : 0;
    if ( !$product_id ) {
        return $form_data;
    }

    // Получаем объект продукта WooCommerce
    $product = wc_get_product( $product_id );
    if ( !$product ) {
        return $form_data;
    }

    // Получаем цену и остаток
    $price = $product->get_price();
    $stock = $product->get_stock_quantity();

    // Записываем эти данные в поля формы
    foreach ( $fields as $field_id => $field ) {
        if ( $field['name'] === 'price' ) {
            $_POST['wpforms']['fields'][$field_id] = wc_price( $price );
        }
        if ( $field['name'] === 'stock' ) {
            $_POST['wpforms']['fields'][$field_id] = $stock !== null ? $stock : 'Нет в наличии';
        }
    }

    return $form_data;
}, 10, 4);

Обратите внимание, что в этом примере мы используем фильтр wpforms_process_before_form_data чтобы подставить значения до обработки формы, а также обращаемся к полям по имени (price и stock).

3. Передача ID товара в форму через шорткод

Если форма размещается на странице товара, можно передавать ID товара динамически через шорткод:

[wpforms id="123" field_id="product_id" field_value="{post_id}"]

Где field_id="product_id" — ID скрытого поля в форме, а {post_id} — динамический тег WordPress с ID текущего поста (товара).

Проверка результата

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

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

  • Неверный ID формы или полей: Проверьте, что ID формы и имена полей совпадают с используемыми в коде.
  • Отсутствие товара или неправильный ID: Убедитесь, что ID товара передается корректно и товар существует в WooCommerce.
  • Поля не обновляются после отправки: Используйте фильтр wpforms_process_before_form_data, а не хуки, срабатывающие после обработки.
  • Кэширование формы: Отключите кэширование страницы с формой или используйте AJAX-отправку WPForms для динамического обновления.

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

  • Кэшируйте цены и остатки товаров на уровне объекта, если данные не меняются часто, чтобы уменьшить нагрузку на БД.
  • Используйте nonce-поля WPForms для защиты от CSRF при отправке форм.
  • Ограничьте доступ к форме только авторизованным пользователям, если данные чувствительны.
  • Проверяйте входящие данные на стороне сервера, например, ID товара, чтобы избежать инъекций и ошибок.

Альтернативные способы реализации: плагин vs код

МетодПреимуществаНедостатки
Кастомный PHP-код Точный контроль, нет лишних плагинов, можно адаптировать под задачи Требует навыков, возможны ошибки при обновлениях
Сторонние плагины для интеграции WPForms и WooCommerce Простота настройки, готовые функции Могут быть платными, ограниченная гибкость, лишняя нагрузка на сайт
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше