# Architecture > Generated by /paul:map-codebase — 2026-04-26 ## Overview Production e-learning platform. Courses are WooCommerce products. Users browse, reserve/buy spots, and join a bbPress forum community. All page layouts are built via Divi Visual Builder; PHP customizations live in the child theme. ## Directory Structure ``` szkoleniauryzaj.pl/ ├── wp-config.php — DB config, WP settings, filesystem perms ├── .htaccess — Apache rewrites + Wordfence WAF rules ├── .user.ini — Wordfence WAF auto_prepend_file ├── cron-products.php — CUSTOM: auto-unpublish products past offer end date ├── wp-content/ │ ├── themes/ │ │ ├── body-relax/ — ACTIVE child theme (all custom code here) │ │ ├── Divi/ — Parent theme (53 MB, do NOT edit) │ │ └── twentytwentytwo/ — Inactive │ ├── plugins/ — 45 plugins (~200 MB total) │ ├── mu-plugins/ │ │ └── installatron_hide_status_test.php — Disables WP auto-update nag │ └── uploads/ — Media (server-only, not in repo) ├── .vscode/ │ ├── ftp-kr.json — FTP deployment config │ ├── sftp.json — SFTP alternative config │ └── settings.json — SCSS compiler config └── .paul/ — Project management (not deployed) ``` ## Active Child Theme: body-relax ``` body-relax/ ├── functions.php — WooCommerce hooks, button text, stock display ├── style.css — Theme header + responsive CSS (981/768/480px breakpoints) ├── screenshot.jpg — Theme preview └── divi-children-engine/ ├── divi_children_engine.php — Loader (includes all engine files) ├── css/ │ └── custom-metabox.css — Admin metabox styling └── includes/ ├── divi_children_functions.php — 2060 lines: Divi customizer extensions, CSS injection ├── custom_codes.php — Admin UI for CSS classes/IDs + "magic codes" └── divi-mods/ └── divi_mod_functions.php — Overrides et_pb_blog and et_pb_cta shortcodes ``` ## Customization Layers (top → bottom) 1. **Divi Visual Builder** — Page/post content (drag-drop, stored as post meta) 2. **body-relax/functions.php** — WooCommerce filters (stock text, CTA button labels) 3. **divi-children-engine** — Customizer extensions, admin UI, Divi shortcode overrides 4. **Divi parent theme** — Core styling, builder components, page templates 5. **WooCommerce** — Product system (courses = products, bookings = orders) 6. **45 Plugins** — SEO, analytics, payments, security, media feeds 7. **WordPress core** — Database, hook system, REST API ## Key Custom Functions | File | Function | What it does | |------|----------|-------------| | `functions.php:30` | `wcs_custom_get_availability()` | Polish stock text: "Duża ilość wolnych miejsc", countdown for last 1-4 spots, "WSZYSTKIE MIEJSCA WYKUPIONE" | | `functions.php:92` | `bbloomer_custom_add_to_cart_single_product()` | Changes "Add to Cart" by category: webinar/book → "Kup teraz", course → "Rezerwuj miejsce" | | `functions.php:108` | `bbloomer_archive_custom_cart_button_text()` | Same logic for archive/shop pages | | `cron-products.php` | (standalone) | Reads ACF `end_date_of_the_offer`, sets product to draft when offer expires | ## Hooks Registered in functions.php | Type | Hook | Function | |------|------|---------| | `add_action` | `wp_enqueue_scripts` | `dce_load_divi_stylesheet()` — enqueues Divi parent CSS | | `add_filter` | `woocommerce_get_availability` | `wcs_custom_get_availability()` | | `add_filter` | `woocommerce_product_single_add_to_cart_text` | `bbloomer_custom_add_to_cart_single_product()` | | `add_filter` | `woocommerce_product_add_to_cart_text` | `bbloomer_archive_custom_cart_button_text()` | ## Data Flow: Course Purchase ``` User → Shop/Archive page → WooCommerce product (course) with custom "Rezerwuj miejsce" button → Cart → Checkout (with NIP field, custom fields) → PayU payment gateway (BLIK/card/bank transfer) → Order confirmation → bbPress forum access (community) ``` ## Database - Name: `garbary_szkury` - Prefix: `wp_` - Host: localhost - Key custom data: ACF fields on products (e.g., `end_date_of_the_offer`)