A lightweight, modern starter theme for WordPress developers. This skeleton is built on 2025 standards, combining the flexibility of Classic PHP templates with the power of theme.json.
Designed to be bloat-free, it utilizes the WordPress Template Hierarchy to reduce file count while maintaining full functionality.
- Hybrid Classic Structure: Traditional PHP templating paired with
theme.jsonfor modern block editor control. - Zero Bloat: Redundant files (like
category.php,tag.php,attachment.php) are removed in favor of a robustarchive.phpfallback. - Modern Organization: Assets live in
assets/and partials intemplate-parts/. - Developer Ready: Includes standard
.gitignoreexclusions and aFUNDING.yml.
├── .github/ # GitHub funding configurations
├── assets/ # CSS, JS, and Images
├── inc/ # Custom PHP functions & template tags
├── languages/ # Translation files (.pot)
├── page-templates/ # Custom page layouts (e.g., Full Width)
├── template-parts/ # Reusable components (Header, Footer, Content)
├── 404.php # Error page
├── archive.php # Universal handler for Cats, Tags, Dates, & Authors
├── footer.php # Footer component
├── front-page.php # Static Homepage template
├── functions.php # Theme setup & Enqueue
├── header.php # Header component
├── index.php # Main fallback template
├── page.php # Single Page template
├── search.php # Search results
├── single.php # Single Post template
├── style.css # Theme declaration
└── theme.json # Global settings (Colors, Layout, Typography)
- Clone or Download:
git clone https://github.com/mgks/wordpress-template-structure.git wp-content/themes/my-theme
- Activate: Go to your WordPress Dashboard > Appearance > Themes and activate the theme.
- Global Settings: Edit
theme.jsonto control typography, color palettes, and layout widths. This is the modern replacement for manyadd_theme_supportcalls. - CSS: Main styles are located in
assets/css/main.css. - Theme Info: Update the theme name and author details in
style.css.
We follow the DRY (Don't Repeat Yourself) principle.
header.phpandfooter.phpload the outer shell.- The Loop content is handled via
get_template_part( 'template-parts/content', ... ).
MIT / GPL-2.0-or-later