1. REGISTRATION (When page is saved)
┌─────────────────────────────────────────────────────────┐
│ Breakdance Page Save │
│ ↓ │
│ Scan for Ajax Filter Facet elements │
│ ↓ │
│ Register facets in woohoo_facets table │
│ • slug (element_id) │
│ • name │
│ • source (taxonomy/category, post_meta/_price, etc.) │
│ • page_id │
│ • settings (JSON) │
└─────────────────────────────────────────────────────────┘
2. INDEXING (Admin action)
┌─────────────────────────────────────────────────────────┐
│ For each registered facet: │
│ ↓ │
│ Get all posts matching post type │
│ ↓ │
│ Extract facet values from each post │
│ ↓ │
│ Store in woohoo_index table │
│ • facet_slug │
│ • object_id (post ID) │
│ • value (raw value) │
│ • display_value (formatted for display) │
└─────────────────────────────────────────────────────────┘
3. QUERYING (When user filters)
┌─────────────────────────────────────────────────────────┐
│ User selects filter options │
│ ↓ │
│ AJAX request with selections │
│ ↓ │
│ Query woohoo_index for matching object_ids │
│ ↓ │
│ Intersect IDs across all active facets │
│ ↓ │
│ Return filtered results │
└─────────────────────────────────────────────────────────┘