Locate the system that owns a GymCore record.
Before correcting a customer record, identify which system owns it. WordPress holds identities and content, WooCommerce owns commerce records, and GymCore stores operational records in custom tables. A database table name is a support handoff, not an instruction to edit production data directly.
The site’s WordPress table prefix replaces `wp_`; for example, `wp_gym_attendance` may be `client1_gym_attendance`.
Source-of-truth map
| Customer information | Owning source | Important note |
|---|---|---|
| Login, email, display name, roles | WordPress users and user meta | GymCore profile values can also live in user meta |
| Products, orders, refunds, subscriptions, payment tokens | WooCommerce and its active storage system | Do not “repair” an order by changing a GymCore log |
| Classes, tournaments, technique videos, announcements, testimonials, legacy trial leads | WordPress custom post types | Publication status and post meta are separate from operational custom tables |
| Attendance, ranks, leads, waivers, retention, referrals, scheduled class occurrences | GymCore custom tables | Use the matching admin workflow when one exists |
| AI conversations and proposed actions | GymCore AI custom tables | Retention purges conversations/messages in the audited source, not pending actions or every audit record |
| QuickBooks transactions | QuickBooks Online | GymCore’s sync log records attempts; it is not the accounting ledger |
| SMS delivery | Configured SMS provider | GymCore logs local submission/status; the provider owns final delivery state |
Core custom-table catalogue
Each name below is appended to the WordPress database prefix.
| Area | Tables |
|---|---|
| Progress and attendance | `gym_ranks`, `gym_rank_history`, `gym_attendance`, `gym_achievements`, `gym_belt_tests`, `gym_belt_test_results`, `gym_belt_system` |
| Communications and activity | `gym_ai_sms_log`, `gym_funnel_log`, `gym_meta_log`, `gym_retention_log` |
| Tournaments and classes | `gym_tournament_registrations`, `gym_tournament_results`, `gym_class_occurrences`, `gym_class_waitlist` |
| Leads and trials | `gym_leads`, `gym_lead_stage_operations`, `gym_inbound_provider_events`, `gym_inbound_provider_effects`, `gym_lead_contacts`, `gym_lead_participants`, `gym_lead_touches`, `gym_lead_consent_events`, `gym_lead_notes`, `gym_lead_communications`, `gym_trial_appointments` |
| Waivers and retention | `gym_waivers`, `gym_waiver_links`, `gym_churn_scores`, `gym_member_pauses` |
| Referrals and accounting | `gym_referrals`, `gym_qbo_sync_log` |
| Tenant, AI knowledge, and audit support | `gym_tenant_access_log`, `gym_ai_knowledge` |
The current registry creates all tables above. Older migrations or extensions may leave additional tables; their presence does not prove current code reads them.
GymCore AI custom tables
| Table | Stored information |
|---|---|
| `gym_core_ai_conversations` | Conversation headers, user association, persona, and timestamps |
| `gym_core_ai_messages` | Messages belonging to conversations |
| `gym_core_ai_pending_actions` | Proposed actions and approval state |
WordPress content types
| Content type key | Customer-facing purpose |
|---|---|
| `gym_class` | Class/program content |
| `gym_tournament` | Public tournament content |
| `gym_technique_video` | Private admin video records rendered for eligible members |
| `gym_announcement` | Announcements |
| `hp_testimonial` | Testimonials; admin UI exists but no menu entry is registered |
| `hp_trial_lead` | Legacy trial-lead content used by older/reporting paths |
Exact steps
Safe stop: Record identifiers and inspect the owning screen without editing tables; stop before any correction when no supported application workflow or scoped restore exists.
-
Start from the visible customer identifier: WordPress user ID/email, WooCommerce order/subscription ID, lead ID, class occurrence, or AI conversation ID.
Expected: You have one stable identifier and the time of the reported event.
-
Open the normal WordPress, WooCommerce, GymCore, QuickBooks, or provider screen that owns the record.
Expected: The source record explains the current status without relying only on a downstream log.
-
Use logs or custom-table rows to trace related activity, keeping the original identifier and timestamps together.
Expected: Related rows point back to the same source record; a missing link is evidence to investigate, not a reason to create one manually.
-
Correct the record through its owning application workflow and re-open the source record.
Expected: The source system shows the intended value and downstream logs reflect a new action. If no supported workflow exists, take a scoped backup and escalate for a reviewed data repair rather than editing an unknown table.
Privacy and recovery boundaries
- A WordPress privacy erasure deletes selected GymCore user meta and rank history and anonymizes attendance to user ID `0`; it does not automatically erase WooCommerce, CRM, provider, AI-action, or backup copies.
- Deleting an AI conversation does not imply every proposed action or external result was removed.
- Restoring one custom table can leave cross-system references inconsistent. Restore related records as a coordinated incident, then verify the owning source and every affected integration.
Verified against: the current GymCore table registry, WordPress post-type registrations, WooCommerce integrations, and GymCore AI activator in the checked-out source.
Need help?
Describe one problem and the installed versions. Never send passwords, license keys, API keys, payment details, or member records.