Головна/WordPress Fullstack/Блупринти/WooCommerce/Розробка накопичувальної бонусної системи та списання балів у чекауті (Cart Fee API)
До карток розділу «WooCommerce»
WooCommerce(ТЗ 43 из 54)
ТЗ: Розробка накопичувальної бонусної системи та списання балів у чекауті (Cart Fee API)
WooCommerce5 шагов • +25 XP

ТЗ: Розробка накопичувальної бонусної системи та списання балів у чекауті (Cart Fee API)

Створення внутрішньої програми лояльності: таблиця журналу нарахувань у БД, автоматичне нарахування % від сплачених замовлень, часткове списання бонусів у чекауті через Cart Fee API та відкат при поверненні.

~12 ч работыУровень: MiddleWC Cart Fee API ($cart->add_fee)User Meta Balance Storagewoocommerce_calculate_totalsOrder Status HooksAJAX Points Redemption UIAtomicity & Race Condition Guards
+5 XP за шаг
Выполнено 0 из 5 шагов (0%)
Трудозатраты~12 рабочих часов
Фриланс вилка~$540 – $900 (€480 – €840)
Оценка веб-студии~$1,140 – $1,920 (€1080 – €1800)

ТЗ заказчика (исходный бриф):

Ми хочемо власну систему бонусних балів. Покупець має отримувати 5% від вартості покупок бонусами, бачити свій баланс в кабінеті та мати можливість списати бали як знижку при наступному замовленні.
Ключевые требования:
  • •Окрема таблиця бази даних wp_loyalty_points для аудиту всіх операцій (нарахування, списання, згоряння)
  • •Автоматичне нарахування балів при зміні статусу замовлення на 'Виконано'
  • •Інтерфейс списання балів у чекауті з можливістю обрати суму знижки
  • •Застосування знижки через нативне API зборів WooCommerce ($cart->add_fee)
  • •Автоматичне повернення або анулювання балів при скасуванні чи поверненні замовлення
Ограничения проекта:
  • •Без сторонніх SaaS-сервісів лояльності зі щомісячними платежами
  • •Сума списання не може перевищувати чисту вартість товарів у кошику
Критерии приёмки (KPI):
  • Збільшення частки повторних замовлень на 22%
  • Нуль розбіжностей у балансах на понад 10 000 акаунтів клієнтів
  • Миттєве відображення оновленого балансу в особистому кабінеті

Конфигурация блупринта под условия проекта

Выберите архитектуру и стек — шаги роадмапа, структура файлов и примеры кода переключатся автоматически:

Пошаговое практическое руководство по ТЗ

Подробный разбор архитектуры, код реализации и советы эксперта по каждому этапу:

1
Этап 1 из 5

Крок 1: Створення таблиці журналу транзакцій та хелперів

~45 минСредний

Практическое руководство:

Створіть таблицю {$wpdb->prefix}loyalty_points (id, user_id, order_id, points, type, date). Опишіть функції get_user_points_balance() та record_points_transaction().

План и контрольные точки реализации:
1Создать методы get_user_points и update_user_points
2Сохранять историю операций (дата, заказ, сумма, тип)
3Отображать текущий баланс в личном кабинете WooCommerce
Важные технические нюансы и подводные камни:

Завжди використовуйте журнал транзакцій замість збереження єдиного числа в user_meta для запобігання втраті історії.

Совет эксперта (Best Practice):

История последних 50 транзакций: Хранение array_slice($log, -50) защищает таблицу wp_usermeta от неконтролируемого разрастания при частых покупках. (Важно: Для масштабных систем со 100 000+ покупателей выносите логирование транзакций в отдельную кастомную таблицу БД.)

Ожидаемый артефакт этапа:

Надежный сервис управления балансом с полной историей начислений и списаний.

PHP
<?php
declare(strict_types=1);

class AgenticLab_Points_Manager {
    private const META_KEY = '_agenticlab_loyalty_points';

    public static function get_balance(int $user_id): int {
        return (int) get_user_meta($user_id, self::META_KEY, true);
    }

    public static function add_points(int $user_id, int $points, int $order_id = 0, string $reason = ''): bool {
        if ($points <= 0) return false;

        $current = self::get_balance($user_id);
        $new_balance = $current + $points;
        update_user_meta($user_id, self::META_KEY, $new_balance);

        self::log_transaction($user_id, $points, 'credit', $order_id, $reason);
        return true;
    }

    public static function debit_points(int $user_id, int $points, int $order_id = 0, string $reason = ''): bool {
        $current = self::get_balance($user_id);
        if ($points <= 0 || $current < $points) return false;

        $new_balance = $current - $points;
        update_user_meta($user_id, self::META_KEY, $new_balance);

        self::log_transaction($user_id, -$points, 'debit', $order_id, $reason);
        return true;
    }

    private static function log_transaction(int $user_id, int $points, string $type, int $order_id, string $reason): void {
        $log = get_user_meta($user_id, '_agenticlab_points_history', true) ?: [];
        $log[] = [
            'timestamp' => time(),
            'points'    => $points,
            'type'      => $type,
            'order_id'  => $order_id,
            'reason'    => $reason,
        ];
        update_user_meta($user_id, '_agenticlab_points_history', array_slice($log, -50)); // Храним последние 50 записей
    }
}
2
Этап 2 из 5

Крок 2: Автоматичне нарахування балів за виконані замовлення

~40 минСредний
3
Этап 3 из 5

Крок 3: Інтерфейс списання балів у кошику та чекауті

~45 минСредний
4
Этап 4 из 5

Крок 4: Застосування знижки через WooCommerce Cart Fee API

~50 минСложный
5
Этап 5 из 5

Крок 5: Списання балів під час оформлення та повернення при скасуванні

~30 минЛегкий

Типичные грабли на этом ТЗ

2 антипаттерна

Инструменты экосистемы Fullstack AI Lab для этого ТЗ

Интеграция