A classic WordPress theme for managing events, seminars, professors, user notes, live search, custom login/register pages, and a polished front-page experience.
Production URL:
https://event-management.ashrafisolutions.com/
The project is intentionally split into two layers:
- Theme code in
wp-content/themes/event-management - Persistent data model code in
wp-content/mu-plugins
This separation matters because custom post types, capabilities, taxonomies, and ACF field groups should not disappear when the theme is switched.
The theme has been reviewed for bootstrap flow, required pages, REST endpoints, login/register routing, escaping, nonce usage, frontend builds, and PHP syntax.
Current production notes:
- The required
mu-pluginsfiles must be deployed with the site. - Advanced Custom Fields should be active for admin editing of custom fields. The frontend has fallbacks, but the admin editing experience is incomplete without ACF.
npm run buildpasses. Webpack still warns about a large lazy-loaded vendor chunk from Three.js/GSAP.- There is no automated test suite yet. Run the manual checklist before launch.
The live demo is deployed on an Ubuntu VPS using a containerized WordPress stack.
Production infrastructure:
- Nginx as the public reverse proxy
- Docker Compose for service orchestration
- WordPress (PHP 8.3 Apache image)
- MariaDB 11
- Cloudflare DNS and HTTPS proxy
- Let's Encrypt SSL certificates managed through Certbot
- Persistent Docker volumes for WordPress and database data
- Theme and mu-plugins mounted separately into wp-content
Cloudflare ↓ Nginx (80/443) ↓ WordPress Container ↓ MariaDB Container
The repository contains only the application code. Production credentials, server configuration, SSL keys, database dumps, and other sensitive infrastructure files are intentionally excluded.
Deployment-specific values such as domains, secrets, and environment configuration should be provided separately for each environment.
- WordPress 6.0+
- PHP 7.4+
- Node.js and npm for building frontend assets
- Advanced Custom Fields for custom field editing in the admin
- Place the theme directory here:
wp-content/themes/event-management
- Make sure these model files exist in
mu-plugins:
wp-content/mu-plugins/custom-post-type.php
wp-content/mu-plugins/theme-capabilities.php
wp-content/mu-plugins/acf-fields.php
wp-content/mu-plugins/professor-taxonomy.php
- Install frontend dependencies and build assets:
npm install
npm run build-
Activate the theme from the WordPress admin.
-
On activation, the theme creates or syncs:
- Required pages:
my-notes,past-events,search,login,register - The default Primary Menu
- Rewrite rules
Custom post types are registered in mu-plugins/custom-post-type.php:
eventseminarprofessornotelike
Capabilities are managed in mu-plugins/theme-capabilities.php.
Professor fields are handled by a taxonomy:
- Taxonomy:
professor_field - Admin path:
Professors > Fields - Behavior: category-like and hierarchical
- Edit screen UI: checkbox list on professor edit pages
ACF field groups are registered in mu-plugins/acf-fields.php with acf_add_local_field_group().
These are local PHP field groups. They may not appear as editable database-backed groups under ACF > Field Groups, but they are available on the relevant edit screens.
Important fields:
event_datefor eventsprofessor_educationandprofessor_agefor professorsseminar_professorfor connecting seminars to professorspage_banner_descriptionandpage_banner_backgroundfor page banners
The old professor_field ACF field is deprecated. Professor fields now use the professor_field taxonomy.
Required page templates:
page-login.phppage-register.phppage-my-notes.phppage-past-events.phppage-search.php
The custom /login/ and /register/ pages are integrated with redirects from wp-login.php?action=login and wp-login.php?action=register.
Registration respects the WordPress Anyone can register setting. If registration is disabled, the custom register form does not create users.
The settings page is available here:
Appearance > Theme Settings
It currently manages banner images for:
- Global archives
- Events archive
- Seminars archive
- Professors archive
If no image is configured, the theme falls back to images in assets/images:
archive.pngevents.pngseminars.pngprofessors.png
Main JavaScript entry:
src/index.js
Important modules:
FrontPageExperience.js: front page hero and sliders using Swiper, GSAP, and Three.jsSearch.js: live search overlaymyNotes.js: user note managementprofessorLike.js: professor likesMobileMenu.js: mobile navigationeventsSlider.js: legacy past-events slider
Build output is written to build/ and enqueued from functions.php.
Custom routes:
GET /wp-json/ataRoute/v1/search?keyword=...
POST /wp-json/ataRoute/v1/like
DELETE /wp-json/ataRoute/v1/like
User notes use the native WordPress REST API for the note post type. The theme enforces the following with rest_pre_insert_note and wp_insert_post_data filters:
- The user must be logged in.
- Users can only edit their own notes.
- Notes are stored as private posts.
- Each user is limited to 5 notes.
functions.php Main theme bootstrap
inc/template-helpers.php Shared helper functions
inc/theme-activation.php after_switch_theme orchestration
inc/page-setup.php Required page creation
inc/navigation-setup.php Default menu creation
inc/theme-settings.php Theme settings page
inc/search_route.php REST search endpoint
inc/Likes_route.php REST like endpoints
inc/custom-login.php Login/register routing
template-part/ Template partials
src/ JavaScript and SCSS source
build/ Production build output
- Disable
WP_DEBUGon production. - Deploy all required
mu-pluginsfiles. - Keep ACF active if admins need to edit custom fields.
- Run
npm run buildand deploy thebuild/directory. - Flush permalinks or ensure rewrite rules have been refreshed.
- Confirm these pages do not 404:
/login/,/register/,/my-notes/,/past-events/,/search/. - Confirm these archives open:
/events/,/seminars/,/professors/. - Confirm
Professors > Fieldsis available in the admin. - Test registration with the WordPress
Anyone can registersetting both enabled and disabled. - Test note create/update/delete as a normal user.
- Test professor like/dislike as a normal user.
- Test the live search overlay and the fallback
/search/page. - Test the front page for console errors.
npm run build
npm run startPHP syntax check:
Get-ChildItem -Recurse -Filter *.php | Where-Object { $_.FullName -notlike '*\node_modules\*' } | ForEach-Object { php -l $_.FullName }- Keep custom post types and capabilities in
mu-plugins, not in the theme. - If a taxonomy or post type changes, bump the relevant internal version and flush rewrite rules once.
- If the theme needs a new ACF field, register it in
mu-plugins/acf-fields.php. - If the theme needs a new required page, add it to
inc/page-setup.php. - Avoid generic
.swiperselectors for new sliders. Each slider should have a dedicated class.
