How to Create a WordPress Theme in 6-Step Process with Code?
Create a custom WordPress theme from scratch in 6 easy steps with code. Learn to structure files, add templates, and enhance functionality seamlessly.

Creating a WordPress theme from scratch involves structuring your files, writing the necessary code, and ensuring compatibility with WordPress standards. Here’s a 6-step process to create a basic WordPress theme:
Step 1: Set Up the Theme Folder & Files
First, create a new folder inside the WordPress themes directory:
???? wp-content/themes/mytheme/
Inside this folder, create the following essential files:
/mytheme
│── style.css
│── index.php
│── functions.php
│── header.php
│── footer.php
│── sidebar.php
│── single.php
│── page.php
│── archive.php
│── 404.php
│── screenshot.png (Optional for theme preview)
style.css
(Theme Info & Styling)
Every WordPress theme needs a style.css
file to define its metadata and basic styling.
/*
Theme Name: MyTheme
Theme URI: https://example.com/
Author: Your Name
Author URI: https://yourwebsite.com/
Description: A custom WordPress theme
Version: 1.0
License: GNU General Public License v2 or later
Text Domain: mytheme
*/
Step 2: Create the Basic Theme Structure
index.php
(Main Template File)
This is the main template that WordPress loads by default.
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?php bloginfo('name'); ?></title>
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<header>
<h1><?php bloginfo('name'); ?></h1>
<p><?php bloginfo('description'); ?></p>
<nav>
<?php wp_nav_menu(array('theme_location' => 'main-menu')); ?>
</nav>
</header>
<main>
<?php
if (have_posts()) :
while (have_posts()) : the_post();
the_title('<h2>', '</h2>');
the_content();
endwhile;
else :
echo '<p>No content found</p>';
endif;
?>
</main>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
</body>
</html>
Step 3: Add Header, Footer & Sidebar
header.php
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?php wp_title(); ?></title>
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<header>
<h1><?php bloginfo('name'); ?></h1>
<p><?php bloginfo('description'); ?></p>
<nav>
<?php wp_nav_menu(array('theme_location' => 'main-menu')); ?>
</nav>
</header>
footer.php
<footer>
<p>© <?php echo date('Y'); ?> <?php bloginfo('name'); ?></p>
</footer>
<?php wp_footer(); ?>
</body>
</html>
sidebar.php
<aside>
<?php if (is_active_sidebar('sidebar-1')) : ?>
<?php dynamic_sidebar('sidebar-1'); ?>
<?php endif; ?>
</aside>
Step 4: Register Theme Features & Enqueue Styles
Modify the functions.php
file to add support for menus, widgets, and styles.
functions.php
<?php
function mytheme_setup() {
add_theme_support('title-tag');
add_theme_support('post-thumbnails');
add_theme_support('custom-logo');
register_nav_menus(array(
'main-menu' => __('Main Menu', 'mytheme')
));
}
add_action('after_setup_theme', 'mytheme_setup');
function mytheme_scripts() {
wp_enqueue_style('mytheme-style', get_stylesheet_uri());
}
add_action('wp_enqueue_scripts', 'mytheme_scripts');
function mytheme_widgets_init() {
register_sidebar(array(
'name' => __('Sidebar', 'mytheme'),
'id' => 'sidebar-1',
'before_widget' => '<div class="widget">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
));
}
add_action('widgets_init', 'mytheme_widgets_init');
?>
Step 5: Create Additional Templates
single.php
(Single Post)
<?php get_header(); ?>
<main>
<?php while (have_posts()) : the_post(); ?>
<article>
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
</article>
<?php endwhile; ?>
</main>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
page.php
(Static Pages)
<?php get_header(); ?>
<main>
<?php while (have_posts()) : the_post(); ?>
<article>
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
</article>
<?php endwhile; ?>
</main>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Step 6: Activate & Test the Theme
- Go to WordPress Admin → Appearance → Themes
- Find "MyTheme" and Activate it
- Visit your site and test it
Optional Enhancements
- Add CSS styles in
style.css
- Create
archive.php
for category pages - Create
404.php
for error handling - Add
customizer.php
for theme customization
This is a basic custom WordPress theme setup. You can now expand it with advanced features like custom post types, widgets, and more styling. Let me know if you need help with a specific feature!
What's Your Reaction?






