diff --git a/README.md b/README.md index 6b31bdd..2a5f5de 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ reviews / messages / memberships / requests / listing-meta --- Registered keys HivePress keeps in core columns instead of meta (`hp_vendor`, `hp_status`, …): see [docs/REGISTERED-KEYS.md](docs/REGISTERED-KEYS.md). +What the HivePress extensions write and how they query it (dev36 inventory, D04 decision): see [docs/HIVEPRESS-COVERAGE.md](docs/HIVEPRESS-COVERAGE.md). ## Requirements diff --git a/docs/HIVEPRESS-COVERAGE.md b/docs/HIVEPRESS-COVERAGE.md new file mode 100644 index 0000000..bf7d8ee --- /dev/null +++ b/docs/HIVEPRESS-COVERAGE.md @@ -0,0 +1,61 @@ +# HivePress coverage: what the extensions write and how HivePress queries it + +Read-only inventory on **dev36** (2026-09-27): HivePress 1.7 with blocks, bookings, +favorites, marketplace, memberships, messages, requests, reviews, seo, social-links and +tags; 101,175 listings, 1,499 vendors, 709 requests. The data is seeded, so features the +seed never used show no rows — noted per line. Account pages (favorites, messages, +memberships) were not crawled (login). + +## Meta keys written (rows, `hp_*`) + +| Post type | Key | Rows | Registered group | Queried? | +|---|---|---|---|---| +| hp_listing | `hp_hourly_rate` | 101,157 | `hp_listing_core` | yes — filter BETWEEN, sort | +| hp_listing | `hp_price` | 100,437 | `hp_listing_core` | yes — filter BETWEEN, sort | +| hp_listing | `hp_rating`, `hp_rating_count` | 53,299 | `hp_listing_core` | `hp_rating` sort | +| hp_listing | `hp_verified` | 31,985 | `hp_listing_core` | no | +| hp_listing | `hp_featured` | 5,131 | `hp_listing_core` | yes — featured block (`= CHAR`, `meta_key` + `rand`) | +| hp_listing | `hp_warranty` | 100,401 | — | no (seed data: values are not warranty term ids; see below) | +| hp_vendor | `hp_rating`, `hp_hourly_rate`, `hp_rating_count`, `hp_verified` | 761–1,499 | `hp_vendor_core` | `hp_hourly_rate` filter, `hp_rating` sort | +| hp_vendor | `hp_availability` | 4 | — | no | +| hp_request | `hp_budget` | 709 | `hp_request_core` | yes — filter BETWEEN, `meta_value_num` sort | +| hp_request | `hp_due_date` | 709 | — | no | +| hp_booking | `hp_start_time`, `hp_end_time` | 1 | `hp_booking_core` | no (1 booking) | +| `*_attribute` | `hp_edit_field_*`, `hp_filterable`, … | 3 each | — | attribute settings, read by ID | + +User meta and comment meta: no `hp_*` rows. Term meta: `hp_sort_order` 170, `hp_icon` +153 (`hp_taxonomy`). + +## Where the extensions keep their data + +- **Reviews** — `hp_review` comments (5,324); rating in `comment_karma` (see + [REGISTERED-KEYS.md](REGISTERED-KEYS.md)). +- **Requests / offers** — `hp_request` posts; offers are `hp_offer` comments (48), no meta. +- **Messages** — `hp_message` comments (0 on dev36). +- **Favorites** — 4 user meta rows (no `hp_` prefix); nothing to flatten. +- **Bookings** — `hp_booking` posts (1); **memberships** — no plans on dev36. +- **Tags / categories / select attributes** — taxonomies (`hp_listing_tags` 2,160, + `hp_listing_category` 101,175, `hp_listing_warranty` 720 relationships). A select + filter (`warranty=28`) becomes `tax_query hp_listing_warranty IN`, never a meta query. +- **SEO, social links** — no rows on dev36. + +## Query shapes seen (front-end crawl, 18 URLs) + +- Search filters on number attributes: `hp_price` / `hp_hourly_rate` / `hp_budget` + `BETWEEN DECIMAL` — routed. +- Sort: the named shape `(NOT EXISTS OR EXISTS)` on `hp_price`, `hp_hourly_rate`, + `hp_rating` with `orderby=__order` — routed, flat-first since core 1.2.0; + requests sort by `meta_key=hp_budget` + `meta_value_num` (a secondary query here) — + a shape the router handles. +- Featured block: `meta_key=hp_featured` + `orderby=rand`, and `hp_featured = CHAR`. +- Every front-end search carries WooCommerce's `product_visibility NOT IN` tax query. +- `HivePress\Components\Attribute::set_search_query` runs its own `get_posts()` inside + `pre_get_posts` (suppress_filters): not routable (~100 ms on dev36). + +## D04 (auto-register HivePress attributes): not now + +Every meta key HivePress queries on dev36 is already registered; select attributes are +taxonomies; the unregistered keys that are written (`hp_due_date`, `hp_availability`, +`hp_warranty`) are never queried. Auto-registration would only pay off on a site whose +admin adds **filterable or sortable number / date attributes** — revisit then (a doctor +check listing such attributes without a registered key would flag it).