Free online course Build a WordPress Theme from Scratch: Beginner to Advanced
Duration of the online course: 8 hours and 8 minutes
New
Create your own WordPress theme from scratch with this free web development course—master templates, menus, widgets, and the Customizer to launch faster.
In this free course, learn about
WordPress theme purpose and structure; how themes control site presentation
Search form requirements: correct input name so WordPress processes search queries
Reusable template parts: include a post-card layout within the main loop (get_template_part)
Enabling featured images with theme support (post-thumbnails) and using thumbnails in templates
Pagination and where posts-per-page is configured (Settings → Reading)
Custom 404 page creation via a 404.php template in the theme
Customizer features: enabling custom-logo so users can set a site logo
Navigation menus: register locations, CSS dropdown hover behavior, and Bootstrap nav walker reasons
Widgets: register sidebars, output with dynamic_sidebar, and organize custom widget code cleanly
Post meta & custom data: categories array handling, post views in postmeta, WP_Query sort by meta
About the free online course
Turn WordPress from a black box into a skill you can actually use. This free online course guides you step by step through building a complete WordPress theme from scratch, starting with the essentials and moving confidently into advanced, real-world features. By the end, you will understand how themes work under the hood and how to shape the front end of a WordPress site with clean structure, reusable layouts, and maintainable code.
You will learn to create the required theme files, connect templates properly, and display posts the WordPress way using the Loop so your pages remain dynamic and scalable. From there, you will level up your workflow by adding styling and assets correctly, organizing your theme for growth, and making decisions that keep performance and compatibility in mind. Along the way, you will see how common site components are built in production themes, so you can apply the same patterns to client projects or your own portfolio.
The course goes beyond basic templates by showing you how to handle important site experiences such as single post pages, pagination, and custom 404 behavior. You will also build flexible navigation with dropdown support, learn why menu registration matters, and adapt markup to match modern frameworks through a custom nav walker approach. This is where theme development starts to feel professional: not just making it work, but making it configurable, reusable, and consistent.
To help you create sites that are easy to manage, you will implement widget areas and create custom widgets, learning how to keep your codebase organized as features grow. You will also work with post meta data patterns such as tracking post views via custom fields, and discover how custom queries can power popular content sections without hacking core files. Finally, you will unlock the WordPress Customizer to give users control over logos, images, slider settings, and text—turning your theme into a polished product people can tailor without touching code.
Whether you are a beginner aiming for your first WordPress development project or a front-end developer wanting to ship themes with confidence, this course helps you build practical skills you can immediately reuse in real sites, freelance work, and web development roles.
Course content
Video class: #01 Wordpress theme from scratch | Intro | Quick programming beginner tutorial17m
Exercise: What is the main purpose of a WordPress theme?
Video class: #02 Wordpress theme from scratch | Action -21m
Exercise: In WordPress development, what is the main purpose of using hooks?
Video class: #03 Wordpress theme from scratch | Required theme files | Quick programming beginner tutorial17m
Exercise: What are the minimum files required inside a new WordPress theme folder for the theme to appear and be usable?
Video class: #04 Wordpress theme from scratch | Displaying posts | Quick programming beginner tutorial19m
Exercise: When displaying multiple posts on a WordPress theme index page, which function must be called inside the while loop to prevent an infinite loop?
Video class: #05 Wordpress theme from scratch | Adding CSS -11m
Exercise: Which parameter in wp_enqueue_script() determines whether a script loads in the footer instead of the header?
Video class: #06 Wordpress theme from scratch | Image slider -09m
Exercise: In a WordPress theme search form, which input name is required so WordPress can process the search query?
Video class: #07 Wordpress theme from scratch | Home page posts | Quick programming beginner tutorial08m
Exercise: How can you include a reusable post card layout inside the main loop on the homepage?
Video class: #08 Wordpress theme from scratch | Post thumbnails | Quick programming beginner tutorial10m
Exercise: How can a theme enable the ability to set a Featured Image for posts in the editor?
Video class: #09 Wordpress theme from scratch | Single post view | Quick programming beginner tutorial14m
Video class: #10 Wordpress theme from scratch | Pagination | Quick programming beginner tutorial26m
Exercise: Where is the maximum number of posts shown per blog page configured in WordPress?
Video class: #11 Wordpress theme from scratch | handling 404 page not found | Quick programming beginner tutorial07m
Exercise: How do you create a custom Page Not Found page in a WordPress theme?
Video class: #12 Wordpress theme from scratch | Custom logo | Quick programming beginner tutorial15m
Exercise: Which WordPress feature must a theme enable to let users upload and change a site logo in the Customizer?
Video class: #13 Wordpress theme from scratch | Navigation menus | Quick programming beginner tutorial15m
Exercise: In a WordPress theme, what is the main purpose of registering navigation menus (menu locations) with register_nav_menus()?
Video class: #14 Wordpress theme from scratch | Navigation styling | Quick programming beginner tutorial15m
Exercise: How can a dropdown submenu be hidden by default and shown only when hovering over its parent menu item?
Video class: #15 Wordpress theme from scratch | Nav walker class | Quick programming beginner tutorial18m
Exercise: What is the main reason to provide a custom walker to wp_nav_menu() when building a Bootstrap-style WordPress navigation?
Video class: #16 Wordpress theme from scratch | Nav walker class 2 | Quick programming beginner tutorial12m
Exercise: When adapting a WordPress menu Walker to match Bootstrap navigation, what class should replace the default submenu class on the nested
?
Video class: #17 Wordpress theme from scratch | Nav dropdowns | Quick programming beginner tutorial14m
Exercise: In a custom WordPress nav walker for Bootstrap, what check is used to add the dropdown class to menu items that contain submenus?
Video class: #18 Wordpress theme from scratch | Page view | Quick programming beginner tutorial08m
Video class: #19 Wordpress theme from scratch | Additional post info | Quick programming beginner tutorial17m
Exercise: When building the post meta section, why did trying to echo get_the_category() directly cause an error?
Video class: #20 Wordpress theme from scratch | Widget areas | Quick programming beginner tutorial14m
Exercise: When adding widgets to a WordPress theme, what must you do before widgets appear under Appearance → Widgets as usable areas?
Video class: #21 Wordpress theme from scratch | Registering widgets | Quick programming beginner tutorial13m
Exercise: Which WordPress function is used in a theme template to output the widgets from a registered sidebar area?
Video class: #22 Wordpress theme from scratch | Create a custom widget | Quick programming beginner tutorial12m
Exercise: Where should custom widget code be organized to keep functions.php clean?
Video class: #23 Wordpress theme from scratch | Display custom widget | Quick programming beginner tutorial16m
Exercise: How do you create a custom loop to fetch specific posts in WordPress?
Video class: #24 Wordpress theme from scratch | Custom widget details | Quick programming beginner tutorial20m
Exercise: When adding a new field (e.g., comment) to a custom WordPress widget, what must you update so the value is saved to the database after refreshing the Widgets page?
Video class: #25 Wordpress theme from scratch | Adding post view count | Quick programming beginner tutorial20m
Exercise: Which WordPress table is designed to store extra post data like a view count without adding new columns to wp_posts?
Video class: #26 Wordpress theme from scratch | Post views custom query | Quick programming beginner tutorial11m
Exercise: Which WP_Query arguments are used to list posts by highest view count first when views are stored in a custom field named views?
Video class: #27 Wordpress theme from scratch | Adding Widget titles | Quick programming beginner tutorial21m
Exercise: How can you stop flexbox from stretching sidebar widget items to match the height of a taller column?
Video class: #28 Wordpress theme from scratch | Customizer API | Quick programming beginner tutorial26m
Exercise: In the WordPress Customizer API workflow, what must be created before adding a control for the slider text or images?
Video class: #29 Wordpress theme from scratch | Customizer API Images | Quick programming beginner tutorial21m
Exercise: When using the WordPress Customizer cropped image control, what value is stored in the setting and how is it turned into a usable image source?
Video class: #30 Wordpress theme from scratch | Customizer slider disable | Quick programming beginner tutorial07m
Exercise: How can a WordPress theme allow users to enable or disable a front-page image slider with one click?
Video class: #31 Wordpress theme from scratch | Slider images text | Quick programming beginner tutorial19m
Exercise: When adding editable slider text in the WordPress Customizer, where should you place the default values so they show up correctly?