4. Template Hooks: Trang Checkout & Thanh toán
Luồng thanh toán của Sicommerce được tổ chức xung quanh hook trung tâm checkout_content. Mỗi section của form checkout được đăng ký vào hook này với priority khác nhau, qua class \Ecommerce\Modules\Web\Checkout\Checkout.
Sơ đồ Hook Checkout
checkout_content
├── priority 20 → Checkout::billingField() → Form địa chỉ thanh toán
├── priority 30 → Checkout::orderField() → Form review đơn hàng + nút đặt
├── priority 40 → Checkout::payment() → Danh sách cổng thanh toán
└── priority 40 → Checkout::shipping() → Danh sách phương thức vận chuyển
Bảng Hook Theo Priority
| Hook Name | Priority | Class::Method | Mô tả | Tham số |
|---|---|---|---|---|
checkout_content | 20 | Checkout::billingField | Form địa chỉ thanh toán (Họ tên, SDT, Tỉnh/Phường, Địa chỉ) | $cart |
checkout_content | 30 | Checkout::orderField | Review đơn hàng, giảm giá, tổng tiền, nút Đặt hàng | $cart |
checkout_content | 40 | Checkout::payment | Danh sách cổng thanh toán (Radio list) | $cart |
checkout_content | 40 | Checkout::shipping | Danh sách phương thức giao hàng (Radio list) | $cart |
Thêm Nội Dung Vào Trang Checkout
💡 Ví dụ: Thêm thông báo tùy chỉnh trước form địa chỉ
add_action('checkout_content', function() {
echo '<div class="alert alert-info">Miễn phí vận chuyển cho đơn trên 500.000đ!</div>';
}, 15); // Trước billingField (20)
💡 Ví dụ: Thêm field ghi chú đơn hàng
add_action('checkout_content', function() {
echo '<div class="checkout-note">';
echo '<label>Ghi chú đơn hàng:</label>';
echo '<textarea name="order_note" rows="3" placeholder="Ghi chú thêm cho đơn hàng..."></textarea>';
echo '</div>';
}, 35); // Giữa orderField và payment
💡 Ví dụ: Ẩn phần chọn phương thức vận chuyển (website digital/download)
remove_action('checkout_content', [\Ecommerce\Modules\Web\Checkout\Checkout::class, 'shipping'], 40);