Создание темы WordPress с нуля за 1 час: пошаговый гайд

Что понадобится для быстрого старта

Для создания темы за один час достаточно базовых знаний PHP, HTML/CSS и доступа к локальному серверу (например, Apache или Nginx). Установите WordPress, создайте пустую папку в wp-content/themes и назовите её mytheme.

1. Структура темы: минимальный набор файлов

  • style.css – заголовок темы и базовые стили.
  • functions.php – регистратор скриптов, меню и виджеты.
  • index.php – основной шаблон.
  • header.php и footer.php – части шаблона.

Создайте эти файлы в директории mytheme и откройте их в редакторе.

style.css – заголовок темы

/*
Theme Name: MyTheme
Theme URI: https://wpbox.by/creation-tutorial
Author: Your Name
Author URI: https://wpbox.by/
Description: Простая тема, созданная за 1 час.
Version: 1.0
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Tags: custom-background, custom-logo, responsive-layout
Text Domain: mytheme
*/

/* Базовые стили */
body {font-family: Arial, sans-serif; margin:0; padding:0;}
header, footer {background:#333; color:#fff; padding:20px; text-align:center;}

functions.php – подключаем стили и регистрируем меню

<?php
// Подключаем стили темы
function mytheme_enqueue_assets() {
    wp_enqueue_style( 'mytheme-style', get_stylesheet_uri() );
    wp_enqueue_script( 'mytheme-main', get_template_directory_uri() . '/js/main.js', array('jquery'), null, true );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_assets' );

// Регистрация меню
function mytheme_register_menus() {
    register_nav_menus( array(
        'primary' => __( 'Primary Menu', 'mytheme' ),
    ) );
}
add_action( 'after_setup_theme', 'mytheme_register_menus' );

// Поддержка виджетов в сайдбаре
function mytheme_widgets_init() {
    register_sidebar( array(
        'name'          => __( 'Sidebar', 'mytheme' ),
        'id'            => 'sidebar-1',
        'before_widget' => '<section class="widget">',
        'after_widget'  => '</section>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
    ) );
}
add_action( 'widgets_init', 'mytheme_widgets_init' );
?>

2. Шаблоны: header, footer и index

Разделим вывод HTML на части, чтобы облегчить поддержку.

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( '|', true, 'right' ); ?></title>
    <?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<header>
    <h1><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
    <nav>
        <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
    </nav>
</header>

footer.php

<footer>
    <p>&copy; <?php echo date('Y'); ?> <?php bloginfo('name'); ?>. Все права защищены.</p>
</footer>
<?php wp_footer(); ?>
</body>
</html>

index.php – основной шаблон

<?php get_header(); ?>
<main>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <article id="post-<?php the_ID(); ?>" class="<?php post_class(); ?>">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div class="entry-content">
                <?php the_excerpt(); ?>
            </div>
        </article>
    <?php endwhile; else: ?>
        <p>Контент не найден.</p>
    <?php endif; ?>
</main>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

3. Добавляем виджет‑область

Создайте файл sidebar.php и выведите зарегистрированный сайдбар.

<?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
    <aside class="sidebar">
        <?php dynamic_sidebar( 'sidebar-1' ); ?>
    </aside>
<?php endif; ?>

Теперь в админке Внешний вид → Виджеты появится новая область, где можно разместить поиск, последние записи и т.д.

4. Настройки темы через Customizer

Для управления цветом фона добавим простой контрол в functions.php:

// Добавляем настройку цвета фона
function mytheme_customize_register( $wp_customize ) {
    $wp_customize->add_section( 'mytheme_colors', array(
        'title'    => __( 'Цвета темы', 'mytheme' ),
        'priority' => 30,
    ) );

    $wp_customize->add_setting( 'header_bg_color', array(
        'default'   => '#333333',
        'transport' => 'refresh',
    ) );

    $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'header_bg_color', array(
        'label'    => __( 'Цвет фона шапки', 'mytheme' ),
        'section'  => 'mytheme_colors',
        'settings' => 'header_bg_color',
    ) ) );
}
add_action( 'customize_register', 'mytheme_customize_register' );

// Применяем выбранный цвет в CSS
function mytheme_dynamic_css() {
    $header_bg = get_theme_mod( 'header_bg_color', '#333333' );
    echo "

«; } add_action( ‘wp_head’, ‘mytheme_dynamic_css’ );

После сохранения в Customizer вы увидите ползунок для изменения цвета шапки в реальном времени.

5. Тестируем и публикуем

  1. Перейдите в «Внешний вид → Темы», активируйте MyTheme.
  2. Проверьте вывод на разных устройствах (отклик в style.css уже есть).
  3. Если нужны ускорения, подключите CDN – отличный вариант BunnyCDN.
  4. Для чистой базы данных после разработки используйте скрипт из статьи Очистка базы данных WordPress.

Готово! Вы создали полностью рабочую тему за 60 минут. Дальше можно добавлять шаблоны страниц (page.php, single.php) и расширять функционал через плагины.

❓ Часто задаваемые вопросы

Как правильно назвать директорию темы?

Директория должна находиться в wp-content/themes и иметь уникальное название без пробелов, например mytheme.

Нужен ли файл style.css, если я использую только CSS‑файлы в папке /css?

Да. WordPress читает заголовок темы только из style.css, поэтому без него тема не будет распознана.

Можно ли подключать скрипты без jQuery?

Конечно, в wp_enqueue_script укажите массив зависимостей, например array(), если скрипт не требует jQuery.

Как быстро очистить базу после разработки темы?

Используйте планировщик cron и плагины из статьи «Очистка базы данных WordPress», они удаляют ревизии, автосохранения и спам‑комментарии.