Site Documentation
Site: http://unidaun.localhost/ Organization: Junior Uni Daun Platform: WordPress (IIS + PHP) integrated with K3 Seminar Management (Blazor backend API) Theme: u-design Database: wp_unidaun Last updated: July 2026
1. Executive Summary (for presentations)
The unidaun-wordpress site is the public web front-end for Junior Uni Daun. It lets visitors:
- Browse and filter courses by subject area, target group, location, and date
- View course details, trainers, and locations
- Register and log in with a K3 participant account
- Add courses to a shopping basket and complete booking in the K3 Blazor webshop
WordPress handles content, layout, and navigation. The K3 API is the system of record for courses, participants, and bookings. Custom plugins connect both worlds.
Key value proposition
| Area | What the site delivers |
|---|---|
| Discovery | Course program, tree search, auto-generated course pages by Fachbereich/Zielgruppe |
| Commerce | Add-to-basket from course lists, basket merge on login, deep-link to K3 checkout |
| Accounts | |
| Branding | Custom header/footer, Fachbereich color coding, floating action buttons |
2. System Architecture
Layered plugin architecture
K3 API Konfiguration (settings) + k3Auth (service token)
?
Template Builders (admin UI ? wp_options templates)
?
Preview / Renderer plugins (shortcodes, JS/React or PHP)
?
Course browsing UIs (K3CourseListPage, K3Kursprogramm, TreeSearch)
?
Auth & commerce (login widget, register, overlay buttons)3. Site Chrome & Global UX
3.1 Branded header and footer (k3-site-header MU-plugin)
- Top bar: Phone
+49 6592 712 8800, emailinfo@junior-uni-daun.de, Facebook & Instagram links - Logo: Junior Uni Daun logo replaces default site title
- Footer: Branded site footer
3.2 Floating overlay buttons (knechtli-overlay-buttons)
A collapsible FAB (floating action button) on all pages with quick access to:
| Button | Default target | Function |
|---|---|---|
| Login | /benutzerkonto/ | Opens account page |
| Search | Theme search toggle | Site-wide search |
| Contact | /kontakt/ | Contact page |
| Cart | K3 webshop basket URL | Shows live basket item count when logged in |
Configured under Settings ? Knechtli Overlay Buttons.
3.3 Login widget in navigation (k3-api-login-widget)
When logged in, the header shows:
- User display name
- Meine Daten ? K3 backend (
BackEnddeep link) - Warenkorb ? K3 shopping basket (
ShoppingBasketdeep link) - Logout
4. Page Map & Functionalities
Note: Exact page titles and counts live in the WordPress database (
wp_posts). The list below is derived from plugin bootstrap logic, navigation defaults, and Course Sync configuration. After deployment, verify the live menu athttp://unidaun.localhost/.
4.1 Core system pages (auto-created by plugins)
| URL | Page title | Shortcode / content | Primary functionality |
|---|---|---|---|
/ | Startseite (front page) | Theme + optional [k3_login_widget] | Landing page; login widget may be prepended automatically |
/benutzerkonto/ | Benutzerkonto | [k3_benutzerkonto] | Tabbed Login and Register |
/kursprogramm/ | Kursprogramm | [K3Kursprogramm] | Full course program with modal filters (date, Fachbereich, Zielgruppe, Kursort, search) |
/trainer | Trainer detail | [TRAINER] or [KursleiterDetail] | Trainer profile; expects ?trainerId={guid} |
4.2 Demo / configuration pages (navigation defaults)
These pages are referenced in K3 Course Sync default site navigation and are typically created manually or during setup:
| URL slug | Label | Typical shortcode | Functionality |
|---|---|---|---|
/kurse/ | Kurse | Parent for generated course pages | Entry point for course browsing; children populated by Course Sync |
/kursliste/ | Kursliste | [K3CourseListPage] or [KursTemplate] | AJAX course list with Kursgruppe cards + detail sidebar |
/kursprogramm-2/ | Kursprogramm (alt.) | [K3Kursprogramm] | Alternative program page (if duplicated during setup) |
/kursgrundlagen-view/ | Kursgrundlagen View | [KursgrundlagenTemplate] | Course fundamentals / prerequisite information |
/kurspool-listen/ | Kurspool listen | [KursPoolListenTemplate] | Course pool lists from /api/tblkursPool |
/kontakt/ | Kontakt | Theme / Elementor content | Contact (overlay button default) |
/beispiel-seite/ | Beispiel-Seite | Demo content | Example / test page |
K3 Course Sync generates a hierarchical page tree under /kurse/ based on K3 data:
Example URL pattern:
/kurse/{fachbereich-slug}/{zielgruppe-slug}/{page-slug}/Example:
/kurse/mathematik-informatik-und-technik/7-10-jaehrige/{course-group-page}/Each generated page contains a [KursTemplate] shortcode pre-configured with:
- Filter for the specific Kursgruppe / CourseGroupingDetail
- Template name from the import library
- PHP or JS rendering mode
- Optional search, quick filters, and sort settings
Post meta stored on generated pages:
4.4 Fachbereiche (Kursgruppen) with brand colors
Configured in k3-course-sync/config/kursgruppen-styles.json:
| Slug | Label | Sidebar color |
|---|---|---|
mathematik-informatik-und-technik | Mathematik, Informatik und Technik | #00ADCA |
naturwissenschaften | Naturwissenschaften | #AFCA05 |
geistes-kultur-und-gesellschaftswissenschaften | Geistes-, Kultur- und Gesellschaftswissenschaften | #B80076 |
gesundheits-ernaehrungs-und-bewegungswissenschaften | #e7323e | |
sozialpaedagogik | #EC6600 | |
sprache-und-kommunikation | Sprache und Kommunikation | #f3f0fb |
natur-und-umwelt | Natur und Umwelt | #eef8f0 |
These colors appear in the right meta sidebar on course detail pages (Fachbereich, Zielgruppe, Dozent/in, Treffpunkt).
5. User Workflows
5.1 Browse courses
Kursprogramm workflow (/kursprogramm/):
1. User sees course program title and filter bar 2. Opens modals: DATUM, FILTER (Fachbereich, Zielgruppe, Kursort), SUCHBEGRIFF 3. Toggles sort: alphabetical ? by date 4. Course list loads via AJAX (/wp-json/k3kp/v1/courses) 5. Only courses with isWebPublished = true are shown
TreeSearch workflow ([treesearch]):
1. Hierarchical tree: Kursgruppe ? CourseGroupingDetail ? courses 2. Optional Zielgruppe filter and text search 3. Leaf nodes link to matching WordPress pages (matched by slug, title, or _k3cs_normalized_key)
5.2 Book a course (Warenkorb)
Steps for end users:
5.3 Login
Login entry points:
- Floating overlay login button
- Login widget in main navigation
- Redirect from course template when login required
5.4 Registration
After registration, the user is immediately logged into both K3 (cookies) and WordPress (auth cookies).
5.5 Account management (post-login)
| Action | How | Destination |
|---|---|---|
| View/edit profile | Meine Daten in header | |
| Open basket | Warenkorb in header or overlay | |
| Edit address data | Link after registration | K3 AdresseDaten deep link |
| Logout | Logout button | Clears K3 cookies and session |
5.6 Trainer & location detail
| Page | URL pattern | Shortcode | Data source |
|---|---|---|---|
| Trainer detail | /trainer?trainerId={guid} | [TRAINER] / [KursleiterDetail] | /api/tblTeilnehmer/courseleaders |
| Location detail | /standort?... (configurable) | [location] / [location_location] | /api/tblkursstandorte |
| Location map | Any page | [location_map] / [locations_map] | Location API + Leaflet |
Trainer links are auto-generated in course templates, e.g. /trainer?trainerId={guid}.
6. Admin Workflows
6.1 K3 API configuration
Menu: WordPress Admin ? K3 API
| Setting | Purpose |
|---|---|
| API Basis URL | K3 Blazor backend root |
| Cache-Dauer | API response cache (default 5 min) |
| Benutzername / Kennwort | Service account for server-side API calls |
| Secret Key (Blazor) | AuthKey for deep links to Meine Daten / Warenkorb |
| Webshop Basket URL | External basket page URL |
| URL extensions | Endpoints for courses, Kursgruppen, locations, Kursgrundlagen, etc. |
| Trainer/Location paths | WordPress paths for detail pages |
Token test: Admin can generate a sample curl command to verify API connectivity.
6.2 Template builders (visual editors)
Each builder provides a React-based grid editor in wp-admin, stores templates in wp_options, and supports JSON import/export.
| Admin menu | Plugin | Frontend shortcode | Data |
|---|---|---|---|
| Kurslisten-Konfig | kurslist-template-builder | [KursTemplate] | Course list API |
| Kurspoollisten-Konfig | kurspoollisten-template-builder | [KursPoolListenTemplate] | /api/tblkursPool |
| Kursgrundlagen-Konfig | kursgrundlagen-template-builder | [KursgrundlagenTemplate] | Kursgrundlagen API |
| Kursleiter-Listen-Konfig | kursleiter-template-builder | [TRAINER], [KursleiterCarousel] | Course leaders API |
| Kursleiter Detail-Templates | kursleiter-detail-template-builder | [KursleiterDetail] | Filtered by repguid |
| Location-Konfig | location-template-builder | [location_locations], [location_map] | Standorte API |
Typical editor workflow:
1. Open builder in admin 2. Design grid layout (fields, labels, cart button, links) 3. Preview (JS or PHP mode) 4. Save template with a unique name 5. Use template name in shortcode: [KursTemplate template="MyTemplate" filter="..."]
6.3 K3 Course Sync (page generation pipeline)
Menu: WordPress Admin ? K3 Course Sync
| Submenu | Purpose |
|---|---|
| Auswahl | Load courses from K3 API; select Kursgruppen / details in tabs |
| Seiten-Builder | Configure shortcode template, rendering mode, filters, menu structure |
| Kursgruppen-Stile | Manage Fachbereich sidebar colors |
| Kursgruppendetails | Settings for course grouping detail display |
| Import-Templates | Template library for generated pages |
| Publish / bulk-manage generated pages |
Content editor workflow:
6.4 Overlay button settings
Menu: Settings ? Knechtli Overlay Buttons
Toggle visibility of login, search, contact, and cart buttons; configure URLs and search selectors.
7. Plugin Reference
7.1 Custom K3 plugins
| Plugin | Role |
|---|---|
k3-Konfig | Central API settings |
k3Auth | Shared auth library (not independently activated) |
k3-api-login-widget | Login widget, basket cookies, deep links |
k3-register | Participant registration |
k3-course-list-page | AJAX course list with filters |
k3-kursprogramm | Modal-based course program UI |
k3-treesearch-shortcode | Hierarchical course tree |
k3-course-sync | Admin page generation from K3 data |
kurslist-template-builder + kurs-template-preview | Course list templates & rendering |
kurspoollisten-template-builder | Course pool templates |
kursgrundlagen-template-builder + preview + block | Course fundamentals templates |
kursleiter-template-builder + detail builder | Trainer list & detail templates |
location-template-builder | Location list, detail, maps |
knechtli-overlay-buttons | Floating action buttons |
7.2 Must-use plugins (wp-content/mu-plugins)
| File | Purpose |
|---|---|
k3-api-transient-cache.php | Shared API response caching |
k3-localhost-ssl.php | SSL verify bypass for local K3 dev API |
k3-site-header.php | Junior Uni branded header/footer |
k3-benutzerkonto-page.php | Auto-creates /benutzerkonto/ |
k3-knechtli-overlay-buttons.php | Always loads overlay plugin |
knechtli-critical-css-visibility-fix.php | Fixes theme white-page race condition |
7.3 Third-party plugins (supporting role)
| Plugin | Role on this site |
|---|---|
| u-design + u-design-core | Main theme and layout |
| Elementor + js_composer | Page building |
| WooCommerce | E-commerce framework (K3 basket is primary booking path) |
| LearnPress | LMS (may be legacy or supplementary) |
| Contact Form 7 / WPForms | Contact forms |
| The Events Calendar | Events |
| Leaflet Map | Maps for location templates |
| Mega Menu | Navigation |
| ACF, Meta Box, Kirki | Custom fields and theme options |
8. API Integration Summary
Authentication
| Endpoint | Used for |
|---|---|
GET /api/Authentication/GetAntiforgeryToken | CSRF token (all server calls) |
POST /api/Authentication/Authenticate | Service account token |
POST /api/loginExternal | End-user login |
Courses & metadata
| Endpoint | Used for |
|---|---|
/api/tblKursDetailsProc/current | Published course lists |
/api/tblkursgruppen | Fachbereich filter data |
/api/tblcourseGroupingDetail | Zielgruppe / grouping filters |
/api/tblkursstandorte | Location data |
/api/tblkursPool | Course pool lists |
/api/tblTeilnehmer/courseleaders | Trainer data |
Shopping basket
| Endpoint | Used for |
|---|---|
GetUserBasketID/{userId} | Read existing basket |
NewBasket/{userId} | Create basket |
AddBookingItem/{orderID}/{itemId} | Add course |
MergeBaskets/{userId}/{tempBasketId} | Merge anonymous basket on login |
GetBookingDataCount/{orderID}/{repGuid} | Cart badge count |
Deep links (Blazor)
| Payload: `UserID={repGuid}&SecretKey={k3_secret_key_logon}&DP={BackEnd | ShoppingBasket | AdresseDaten}` |
|---|
URL: {base}/Authenticate?Authkey={base64(payload)}
9. Shortcode Quick Reference
| Shortcode | Page / context | Description |
|---|---|---|
[k3_benutzerkonto] | /benutzerkonto/ | Tabbed login + register |
[k3_login_widget] | Header, account page | Login form + logged-in nav |
[k3_register_form] | Account page (register tab) | Registration form |
[K3Kursprogramm] | /kursprogramm/ | Course program with modals |
[K3CourseListPage] | Course list pages | Full AJAX list with sidebar filters |
[KursTemplate template="..." filter="..."] | Generated & manual pages | Renders course cards from template |
[treesearch] | Any page | Hierarchical course tree |
[TRAINER] | /trainer | Trainer detail |
[KursleiterDetail] | Trainer pages | Alternative trainer detail |
[KursgrundlagenTemplate] | Kursgrundlagen pages | Course fundamentals |
[KursPoolListenTemplate] | Kurspool pages | Course pool display |
[location_locations] | Location overview | All locations |
[location] / [location_location] | Location detail | Single location |
[location_map] | Any page | Single location map |
10. Presentation Outline (slide suggestions)
Use this outline for a stakeholder presentation:
- Challenge: Present K3 seminar data on a modern, branded public website
- Solution: WordPress front-end + K3 API back-end + custom bridge plugins
Use the mermaid diagram from Section 2.
1. Land on homepage 2. Browse Kursprogramm or Fachbereich pages 3. Add courses to Warenkorb 4. Register / login 5. Complete booking in K3 webshop
- Modal filters (date, Fachbereich, Zielgruppe, Ort, search)
- TreeSearch navigation
- Auto-generated pages per course grouping
- Fachbereich color coding
- K3 API settings (one central config)
- Visual template builders (no code needed for layout changes)
- K3 Course Sync (bulk page generation from K3 data)
- Custom header/footer (contact, social)
- Floating action buttons (login, search, contact, cart)
- Responsive u-design theme
- WordPress on IIS (
web.configrewrite toindex.php) - Database:
wp_unidaun - API cache: configurable (default 5 min)
- Related project:
fba_wordpresssyncs K3 plugins from this repo
- Live demo
- Content publishing workflow training
- Production domain cutover checklist
11. Environment & Deployment Notes
| Item | Value |
|---|---|
| Local URL | http://unidaun.localhost |
| Document root | C:\inetpub\unidaun-wordpress |
| Web server | IIS with PHP FastCGI |
| DB name | wp_unidaun |
| Table prefix | wp_ |
| Related sync script | fba_wordpress/scripts/sync-k3-from-unidaun.ps1 |
Local development requirements
1. IIS site bound to unidaun.localhost (hosts file entry) 2. MySQL reachable with wp_unidaun database 3. K3 API base URL configured in K3 API admin (local Blazor instance or remote) 4. k3-localhost-ssl.php relaxes SSL verification for local K3 dev servers
12. Related documentation in this repository
| File | Content |
|---|---|
Kurslisten-Warenkorb-Joomla-Bedienungsanleitung.md | Basket/login flow (Joomla variant; same K3 API concepts) |
wp-content/plugins/docs/ | Plugin change log and component notes |
wp-content/plugins/docs/classes/K3_API_Login_Widget.md | Login widget behavior |
wp-content/plugins/docs/components/k3-registeruser.md | Registration auto-login |
wp-content/plugins/docs/components/kurs-template-preview.md | Cart modal & source propagation |
13. Glossary
| Term | Meaning |
|---|---|
| K3 | Seminar management system (Blazor API + webshop) |
| Kursgruppe | Subject area / Fachbereich (top-level course grouping) |
| CourseGroupingDetail | Sub-grouping, often Zielgruppe (target age group) |
| Warenkorb | Shopping basket in K3 webshop |
| Meine Daten | User profile area in K3 backend |
| repGuid / repGuidUser | K3 participant identifier |
| orderID | Shopping basket ID |
| isWebPublished | Flag: course visible on public website |
| wp_ref | Source URL appended to external K3 links for referrer tracking |
*This document was generated from codebase analysis. For an exact live page inventory, run wp post list --post_type=page --post_status=publish against a running instance, or inspect Pages in wp-admin.*
