Как в плагине WooCommerce Deposits при выборе полной оплаты сделать скидку 10%?

Ссылка скопирована
1 ответ

Суть такая. Установлен плагин WooCommerce Deposits. Сделаны все настройки для выбора частичной оплаты (30% от общей суммы) и есть выбор полной оплаты. Так вот - Как сделать, что бы при выборе полной оплаты сделать скидку 10% и сумма выставленная к оплате (total) пересчитывалась и отображалась?

Дополнительные вопросы

Ответы:

Это решается с помощью функции:

// Функция для расчета скидки function custom_discount_total( $total, $cart ) {     // Проверяем, выбрана ли полная оплата     if ( isset( $_POST['wc_deposit_option'] ) && $_POST['wc_deposit_option'] === 'full' ) {         // Применяем скидку 10%         $total -= $total * 0.1;     }      return $total; } add_filter( 'woocommerce_cart_total', 'custom_discount_total', 10, 2 );  // Функция для обновления суммы к оплате на странице оформления заказа function custom_update_order_review( $data ) {     // Проверяем, выбрана ли полная оплата     if ( isset( $_POST['wc_deposit_option'] ) && $_POST['wc_deposit_option'] === 'full' ) {         // Получаем общую сумму заказа         $total = WC()->cart->get_total();         // Применяем скидку 10%         $total -= $total * 0.1;         // Обновляем сумму к оплате на странице оформления заказа         $data['payment_total'] = wc_price( $total );     }      return $data; } add_filter( 'woocommerce_get_order_item_totals', 'custom_update_order_review', 10, 1 );

// Функция для расчета скидки function custom_discount_total( $total, $cart ) { // Проверяем, выбрана ли полная оплата if ( isset( $_POST['wc_deposit_option'] ) && $_POST['wc_deposit_option'] === 'full' ) { // Применяем скидку 10% $total -= $total * 0.1; } return $total; } add_filter( 'woocommerce_cart_total', 'custom_discount_total', 10, 2 ); // Функция для обновления суммы к оплате на странице оформления заказа function custom_update_order_review( $data ) { // Проверяем, выбрана ли полная оплата if ( isset( $_POST['wc_deposit_option'] ) && $_POST['wc_deposit_option'] === 'full' ) { // Получаем общую сумму заказа $total = WC()->cart->get_total(); // Применяем скидку 10% $total -= $total * 0.1; // Обновляем сумму к оплате на странице оформления заказа $data['payment_total'] = wc_price( $total ); } return $data; } add_filter( 'woocommerce_get_order_item_totals', 'custom_update_order_review', 10, 1 );

eratnikstudio @eratnikstudio Автор вопроса There has been a critical error on this website. Сайт выдал критическую ошибку). Я тоже пробывал так - но что то не так))

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

Скидку 10% при полной оплате нужно делать не просто визуально, а через пересчёт корзины/заказа. В WooCommerce правильное место для скидки — fee с отрицательным значением через woocommerce_cart_calculate_fees. Но с WooCommerce Deposits нужно понять, где плагин хранит выбранный режим оплаты: в session, POST или cart item meta.

Общая схема:

add_action('woocommerce_cart_calculate_fees', function ($cart) {
    if (is_admin() && ! defined('DOING_AJAX')) {
        return;
    }
 
    $is_full_payment = WC()->session ? WC()->session->get('full_payment_selected') : false;
 
    if (! $is_full_payment) {
        return;
    }
 
    $discount = $cart->get_subtotal() * 0.10;
    $cart->add_fee('Скидка за полную оплату', -$discount);
});

add_action('woocommerce_cart_calculate_fees', function ($cart) { if (is_admin() && ! defined('DOING_AJAX')) { return; } $is_full_payment = WC()->session ? WC()->session->get('full_payment_selected') : false; if (! $is_full_payment) { return; } $discount = $cart->get_subtotal() * 0.10; $cart->add_fee('Скидка за полную оплату', -$discount); });

Этот код не готов для вашего плагина, потому что ключ full_payment_selected условный. Нужно найти реальный ключ, который ставит WooCommerce Deposits. Посмотрите POST-запрос при переключении оплаты, session WooCommerce или документацию плагина.

Если плагин меняет totals через AJAX, после выбора полной оплаты нужно вызвать обновление checkout/cart fragments. Иначе сумма пересчитается только после обновления страницы.

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

Порядок действий: найти признак полной оплаты, сохранить его в сессии, пересчитать корзину через fee, проверить корзину, checkout, письмо и админку заказа.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно