Creating a WordPress theme may seem complex at first, but by following a structured approach, you can create a fully functional theme. Here are the steps to create a WordPress theme from scratch:
Before you begin, make sure you have the following tools:
Start by creating a folder for your theme in the WordPress themes directory: /wp-content/themes/
. Give it a meaningful name, such as mon-theme-personnalise
. Then, inside this folder, create the following files:
style.css
: The main style file for your theme. It should contain a comment header with the basic theme information./* Theme Name: Mon Thème Personnalisé Theme URI: http://mon-site.com Author: Moi Author URI: http://mon-site.com Description: Un thème WordPress personnalisé. Version: 1.0 */
index.php
: The main theme file that will be used to display all of your site's content.<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php bloginfo('name'); ?></title> <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>"> </head> <body> <header> <h1><?php bloginfo('name'); ?></h1> <p><?php bloginfo('description'); ?></p> </header> <main> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h2><?php the_title(); ?></h2> <?php the_content(); ?> <?php endwhile; else : echo '<p>Aucun contenu trouvé</p>'; endif; ?> </main> <footer> <p>© <?php echo date('Y'); ?> - Mon Thème Personnalisé</p> </footer> </body> </html>
functions.php
: This file is used to add functionality to your theme. It allows you to register scripts, menus, widgets, etc. Add this code to it to get started:<?php function mon_theme_enqueue_styles() { wp_enqueue_style('style', get_stylesheet_uri()); } add_action('wp_enqueue_scripts', 'mon_theme_enqueue_styles');
Once you have created these basic files, you can activate your theme in the WordPress dashboard. Go to Appearance > Themes , and you will see your new theme in the list. Click Activate .
To further customize your theme, you can add several specific template files:
index.php
with this function:<?php get_header(); ?>
Example of header.php
:
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php wp_title(); ?></title> <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>"> <?php wp_head(); ?> </head> <body> <header> <nav> <?php wp_nav_menu(array('theme_location' => 'header-menu')); ?> </nav> </header>
index.php
file with <?php get_footer(); ?>
.Example of footer.php
:
<footer> <p>© <?php echo date('Y'); ?> - Mon Thème Personnalisé</p> <?php wp_footer(); ?> </footer> </body> </html>
index.php
when a user views an article.Example of single.php
:
<?php get_header(); ?> <main> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h2><?php the_title(); ?></h2> <?php the_content(); ?> <?php endwhile; endif; ?> </main> <?php get_footer(); ?>
In your functions.php
file you can add support for menus and widgets like this:
function mon_theme_setup() { register_nav_menus(array( 'header-menu' => __('Menu Principal') )); } add_action('after_setup_theme', 'mon_theme_setup');
function mon_theme_widgets_init() { register_sidebar(array( 'name' => __('Sidebar Principale'), 'id' => 'sidebar-1', 'description' => __('Zone de widgets pour la barre latérale.'), 'before_widget' => '<div class="widget">', 'after_widget' => '</div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', )); } add_action('widgets_init', 'mon_theme_widgets_init');
Hooks and filters allow you to customize the look and functionality without directly modifying WordPress code. For example, you can use a hook to add content to the footer:
function ajouter_contenu_footer() { echo '<p>Texte ajouté dans le footer via un hook</p>'; } add_action('wp_footer', 'ajouter_contenu_footer');
You can optimize your theme by loading scripts and styles conditionally. For example, loading a specific JavaScript file only on the home page:
function charger_script_page_accueil() { if (is_front_page()) { wp_enqueue_script('mon-script', get_template_directory_uri() . '/js/mon-script.js', array(), '1.0', true); } } add_action('wp_enqueue_scripts', 'charger_script_page_accueil');
Building a WordPress theme requires understanding the structure of WordPress and knowing how to use files, hooks, and filters. Once you master these concepts, you can customize the look and functionality of your site to meet the specific needs of your project.