feat: Add-to-cart from URL parameters
Implements direct-to-cart functionality for landing page CTAs. Features: - Parse URL parameters: ?add-to-cart=123 - Support simple products: ?add-to-cart=123 - Support variable products: ?add-to-cart=123&variation_id=456 - Support quantity: ?add-to-cart=123&quantity=2 - Auto-navigate to cart after adding - Clean URL after adding (remove parameters) - Toast notification on success/error Usage examples: 1. Simple product: https://site.com/store?add-to-cart=332 2. Variable product: https://site.com/store?add-to-cart=332&variation_id=456 3. With quantity: https://site.com/store?add-to-cart=332&quantity=3 Flow: - User clicks CTA on landing page - Redirects to SPA with add-to-cart parameter - SPA loads, hook detects parameter - Adds product to cart via API - Navigates to cart page - Shows success toast Works with both SPA modes: - Full SPA: loads shop, adds to cart, navigates to cart - Checkout Only: loads cart, adds to cart, stays on cart
This commit is contained in:
@@ -6,6 +6,7 @@ import { Toaster } from 'sonner';
|
||||
// Theme
|
||||
import { ThemeProvider } from './contexts/ThemeContext';
|
||||
import { BaseLayout } from './layouts/BaseLayout';
|
||||
import { useAddToCartFromUrl } from './hooks/useAddToCartFromUrl';
|
||||
|
||||
// Pages
|
||||
import Shop from './pages/Shop';
|
||||
@@ -56,14 +57,21 @@ function App() {
|
||||
const appearanceSettings = getAppearanceSettings();
|
||||
const toastPosition = (appearanceSettings?.general?.toast_position || 'top-right') as any;
|
||||
|
||||
// Handle add-to-cart from URL parameters
|
||||
useAddToCartFromUrl();
|
||||
|
||||
// Get initial route from data attribute (set by PHP based on SPA mode)
|
||||
const getInitialRoute = () => {
|
||||
const appEl = document.getElementById('woonoow-customer-app');
|
||||
const initialRoute = appEl?.getAttribute('data-initial-route');
|
||||
console.log('[WooNooW Customer] Initial route from data attribute:', initialRoute);
|
||||
console.log('[WooNooW Customer] App element:', appEl);
|
||||
console.log('[WooNooW Customer] All data attributes:', appEl?.dataset);
|
||||
return initialRoute || '/shop'; // Default to shop if not specified
|
||||
};
|
||||
|
||||
const initialRoute = getInitialRoute();
|
||||
console.log('[WooNooW Customer] Using initial route:', initialRoute);
|
||||
|
||||
return (
|
||||
<QueryClientProvider client={queryClient}>
|
||||
|
||||
Reference in New Issue
Block a user