Разделите плату за регистрацию на ежемесячные платежи в подписках WooCommerce.

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

Мне нужно установить регистрационный сбор, разделенный на ежемесячные платежи, следующим образом:

  • Цена продукта: 10$ за 3 месяца.
  • Регистрационный сбор: 3$

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что регистрационный сбор взимается в первом платеже, и я не могу найти способ разделить его на ежемесячные платежи, так что, согласно приведенному выше примеру, 4.33$ должны взиматься в течение 3 месяцев (цена продукта/3 + регистрационный сбор/3 каждый месяц). В настоящее время в первый месяц взимается 6.33$, а в следующие 2 месяца 3.33$.

Я использую подписки woocommerce и не могу избежать платы за подписку никаким образом, например, я не могу просто разделить плату за подписку и добавить ее к ежемесячной цене вручную (требование клиента…).

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

add_filter('wcs_recurring_cart_contents_total', 'install_signup_fee', 10, 2);

function install_signup_fee($recurring_total, $cart) {
    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];

        if ($product->is_type('subscription')) {
            $base_price = (float) $product->get_regular_price();
            $signup_fee = (float) $product->get_sign_up_fee();
            $duration = (int) $product->get_subscription_period_interval();

            if ($duration > 0) {
                $monthly_price = ($base_price + $signup_fee ) / $duration ;
                $recurring_total = $monthly_price ;
            }
        }
    }
    return $recurring_total;
}

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

Разделение платы за регистрацию на ежемесячные платежи в WooCommerce Subscriptions

Чтобы решить вашу задачу по разделению платы за регистрацию на ежемесячные платежи в WooCommerce Subscriptions, необходимо учесть несколько важных шагов. В вашем случае вы хотите, чтобы сумма $3, взимаемая как плата за регистрацию, была распределена равномерно на три месяца. Исходя из ваших требований, итоговая сумма ежемесячных платежей должна составлять $4.33 ($10/3 + $3/3).

Шаги по реализации

  1. Понимание структуры подписки:

    • Ваша подписка состоит из двух частей: регулярной платы за продукт и платы за регистрацию. Вам необходимо разделить плату за регистрацию на период подписки (в данном случае на 3 месяца).
  2. Модификация кода с использованием фильтров WooCommerce:

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

Исправленный код

Вот как может выглядеть обновленный код:

add_filter('wcs_recurring_cart_contents_total', 'divide_signup_fee_into_monthly_payments', 10, 2);

function divide_signup_fee_into_monthly_payments($recurring_total, $cart) {
    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];

        // Проверяем, является ли продукт подпиской
        if ($product->is_type('subscription')) {
            $base_price = (float) $product->get_regular_price(); // Цена продукта
            $signup_fee = (float) $product->get_sign_up_fee(); // Плата за регистрацию
            $duration = (int) $product->get_subscription_period_interval(); // Продолжительность подписки

            // Обеспечиваем, что продолжительность больше нуля
            if ($duration > 0) {
                // Рассчитываем ежемесячную плату
                $monthly_price = ($base_price + $signup_fee) / $duration;
                $recurring_total += $monthly_price; // Добавляем к общему итогу
            }
        } 
    }
    return $recurring_total;
}

Пояснение кода

  1. Фильтрация возобновляющейся суммы: В начале мы добавляем фильтр для регулярного расчета суммы подписки.
  2. Цикл по товарам в корзине: Для каждого товара мы проверяем, является ли он подпиской.
  3. Получение значений: Мы извлекаем базовую цену, плату за регистрацию и продолжительность подписки.
  4. Расчет месячной платы: Мы делим общую сумму (базовая цена + плата за регистрацию) на количество месяцев и обновляем общую сумму ежемесячного платежа.

Тестирование изменений

После внесения изменений в код, вам необходимо протестировать его в WooCommerce:

  • Создайте тестовую подписку с правильными значениями.
  • Проверьте, что в процессе оформления заказа и последующих платежей сумма $4.33 будет взиматься каждый месяц.

Заключение

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

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

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

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