Плагин WooCommerce для купонов

Вопрос или проблема

Плагин WooCommerce для купонов

Я разрабатываю плагин для WordPress, который работает с WooCommerce. У меня есть таблица базы данных с кодами скидок. С помощью этого кода мой клиент может купить 10 билетов на фильм. Это может означать, что он заказывает 10 билетов в одном заказе или пять заказов по два билета в каждом.

Я пытаюсь получить данные POST от WooCommerce, когда заполняю код скидки, но у меня это не получается.

function strippenkaart_apply_discount($cart) {
    
    error_log('POST-данные: ' . json_encode($_POST));

    // проверяет, найден ли код купона - затем применяет скидку

}
add_action('woocommerce_cart_calculate_fees', 'strippenkaart_apply_discount');

Я не получаю никаких данных POST. Что я делаю не так?

Логи:
POST-данные: []

Ответ или решение

Для решения вашей проблемы с получением POST-данных для купонов в WooCommerce, нужно учитывать несколько моментов. Основная проблема заключается в том, что действие woocommerce_cart_calculate_fees вызывается на этапе, когда данные формы еще не отправлены, и поэтому $_POST будет пустым.

Чтобы правильно получить данные купона, рекомендуется использовать хук woocommerce_applied_coupon, который срабатывает после применения купона. Вот пример того, как это можно реализовать:

// Добавляем действие при применении купона
function strippenkaart_apply_discount($coupon_code) {
    // Проверяем, какой купон был применен
    error_log('Применен купон: ' . $coupon_code);

    // Здесь вы можете подключиться к вашей базе данных, чтобы проверить купон
    global $wpdb;
    $table_name = $wpdb->prefix . 'ваша_таблица'; // замените на название вашей таблицы
    $discount = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE coupon_code = %s", $coupon_code));

    if ($discount) {
        // Логика применения скидки
        error_log('Скидка найдена: ' . json_encode($discount));

        // Применяем скидку к корзине
        WC()->cart->add_fee(__('Discount', 'woocommerce'), -$discount->amount); // Убедитесь, что amount - отрицательное значение
    } else {
        error_log('Купон не найден.');
    }
}
add_action('woocommerce_applied_coupon', 'strippenkaart_apply_discount');

// Также полезно удалять скидку, если купон отменяется
function strippenkaart_remove_discount($coupon_code) {
    // Логика удаления скидки, если необходимо
}
add_action('woocommerce_removed_coupon', 'strippenkaart_remove_discount');

Объяснение кода:

  1. Хук woocommerce_applied_coupon позволяет вам работать с применяемыми купонами сразу после их применения.
  2. Используя глобальную переменную $wpdb, вы можете получить доступ к вашей базе данных и проверить наличие купона по коду.
  3. Если купон найден и действителен, скидка применяется к корзине при помощи метода add_fee(), где вы можете указать название и величину скидки.

Таким образом, этот подход позволит вам корректно обрабатывать купоны и получать данные о них без проблем. Не забудьте проверить и настроить соответствие ваших данных с кодами, которые вы используете в WooCommerce.

Если у вас есть дополнительные вопросы или нужна дальнейшая помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...