Вопрос или проблема
Мне нужно установить регистрационный сбор, разделенный на ежемесячные платежи, следующим образом:
- Цена продукта: 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).
Шаги по реализации
-
Понимание структуры подписки:
- Ваша подписка состоит из двух частей: регулярной платы за продукт и платы за регистрацию. Вам необходимо разделить плату за регистрацию на период подписки (в данном случае на 3 месяца).
-
Модификация кода с использованием фильтров 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;
}
Пояснение кода
- Фильтрация возобновляющейся суммы: В начале мы добавляем фильтр для регулярного расчета суммы подписки.
- Цикл по товарам в корзине: Для каждого товара мы проверяем, является ли он подпиской.
- Получение значений: Мы извлекаем базовую цену, плату за регистрацию и продолжительность подписки.
- Расчет месячной платы: Мы делим общую сумму (базовая цена + плата за регистрацию) на количество месяцев и обновляем общую сумму ежемесячного платежа.
Тестирование изменений
После внесения изменений в код, вам необходимо протестировать его в WooCommerce:
- Создайте тестовую подписку с правильными значениями.
- Проверьте, что в процессе оформления заказа и последующих платежей сумма $4.33 будет взиматься каждый месяц.
Заключение
С помощью вышеописанного процесса и приведенного кода вы сможете разделить плату за регистрацию на равные месячные платежи, соответствуя требованиям вашего клиента. Как только все корректно настроено и протестировано, ваши клиенты смогут легко оформлять подписки, не беспокоясь о первоначальных издержках.
Не бойтесь экспериментировать с кодом и проверять его в различных сценариях. Главное – убедиться, что пользовательский опыт остается на высоком уровне и платежи обрабатываются корректно.