Автоматизация создания и удаления тем в WordPress через код

В процессе разработки и поддержки сайтов на WordPress часто возникает необходимость массово управлять темами — создавать, активировать, удалять их программно. Это особенно актуально при работе с множеством сайтов или в рамках CI/CD процессов. В этой статье мы подробно рассмотрим, как автоматизировать создание и удаление тем WordPress с помощью PHP, а также покажем примеры кода и расскажем о полезных плагинах, которые помогут в этой задаче.

Почему стоит автоматизировать управление темами WordPress

Стандартный способ управления темами через админку WordPress удобен для единичных действий, но не подходит для массовой работы или интеграции с внешними системами. Автоматизация позволяет:

  • Сократить время на развертывание новых сайтов с готовыми темами.
  • Автоматически удалять устаревшие темы, снижая риск безопасности.
  • Интегрировать управление темами в систему контроля версий и CI/CD.
  • Избегать ошибок при ручном копировании и удалении файлов.

Рассмотрим, как все это реализовать с помощью PHP и встроенных функций WordPress.

Создание и активация темы программно

Создание темы программно — задача нетривиальная, поскольку тема — это набор файлов с определенной структурой. Однако часто достаточно подготовить шаблон темы, а затем копировать его с нужным названием и активировать.

Копирование шаблона темы

Для создания новой темы мы можем программно скопировать папку с шаблоном темы в директорию wp-content/themes. Вот пример функции для этого:

function wpkit_create_theme_from_template($new_theme_slug, $template_theme_slug) {
    $themes_dir = get_theme_root();
    $source = $themes_dir . '/' . $template_theme_slug;
    $destination = $themes_dir . '/' . $new_theme_slug;

    if (!file_exists($source)) {
        return new WP_Error('template_not_found', 'Исходная тема не найдена');
    }

    if (file_exists($destination)) {
        return new WP_Error('theme_exists', 'Тема с таким именем уже существует');
    }

    // Рекурсивное копирование папки
    $copy = wpkit_recursive_copy($source, $destination);
    if (!$copy) {
        return new WP_Error('copy_failed', 'Не удалось скопировать тему');
    }

    return true;
}

function wpkit_recursive_copy($src, $dst) {
    $dir = opendir($src);
    @mkdir($dst);
    while(false !== ($file = readdir($dir))) {
        if (($file != '.') && ($file != '..')) {
            if (is_dir($src . '/' . $file)) {
                wpkit_recursive_copy($src . '/' . $file, $dst . '/' . $file);
            } else {
                copy($src . '/' . $file, $dst . '/' . $file);
            }
        }
    }
    closedir($dir);
    return true;
}

Данная функция копирует структуру темы и все файлы. После копирования нужно изменить в style.css темы заголовок темы (Theme Name), чтобы WordPress распознал её как отдельную.

Изменение заголовка темы

Для этого можно прочитать style.css новой темы, заменить строку с Theme Name и записать обратно:

function wpkit_update_theme_header($theme_slug, $new_theme_name) {
    $theme_dir = get_theme_root() . '/' . $theme_slug;
    $style_css = $theme_dir . '/style.css';
    if (!file_exists($style_css)) {
        return new WP_Error('style_not_found', 'Файл style.css не найден');
    }

    $content = file_get_contents($style_css);
    $content = preg_replace('/(Theme Name:\s*)(.*)/i', '$1' . $new_theme_name, $content);
    file_put_contents($style_css, $content);

    return true;
}

Таким образом, вы можете создавать новые темы на базе шаблона и задавать им уникальные имена.

Активация темы через код

Для активации темы в WordPress используется функция switch_theme():

function wpkit_activate_theme($theme_slug) {
    switch_theme($theme_slug);
}

Важно, чтобы тема была корректно распознана WordPress — то есть содержала обязательный файл style.css с валидным заголовком.

Удаление темы программно

Удаление темы в WordPress можно выполнить через функцию delete_theme(), которая появляетcя в WordPress начиная с версии 4.3. Она удаляет файлы темы из файловой системы.

function wpkit_delete_theme_by_slug($theme_slug) {
    $theme = wp_get_theme($theme_slug);
    if (!$theme->exists()) {
        return new WP_Error('theme_not_found', 'Тема не найдена');
    }

    if ($theme->get_stylesheet() === get_stylesheet()) {
        return new WP_Error('active_theme', 'Нельзя удалить активную тему');
    }

    $deleted = delete_theme($theme_slug);
    if (is_wp_error($deleted)) {
        return $deleted;
    }

    return true;
}

Перед удалением важно проверить, что тема не активна, иначе WordPress откажется её удалять.

Примеры практического использования

Автоматическое создание темы с уникальным названием

Предположим, надо создать копию темы reboot с названием reboot-child-123 и активировать её:

$result = wpkit_create_theme_from_template('reboot-child-123', 'reboot');
if (is_wp_error($result)) {
    echo 'Ошибка создания темы: ' . $result->get_error_message();
    return;
}

wpkit_update_theme_header('reboot-child-123', 'Reboot Child 123');
wpkit_activate_theme('reboot-child-123');
echo 'Тема создана и активирована успешно.';

Удаление неиспользуемых тем

Для безопасности полезно периодически удалять неиспользуемые темы. Можно реализовать функцию, которая удалит все темы, кроме активной и списка исключений:

function wpkit_delete_unused_themes($exclude = []) {
    $current = get_stylesheet();
    $themes = wp_get_themes();

    foreach ($themes as $slug => $theme) {
        if ($slug === $current) continue;
        if (in_array($slug, $exclude)) continue;

        $res = delete_theme($slug);
        if (is_wp_error($res)) {
            error_log('Ошибка удаления темы ' . $slug . ': ' . $res->get_error_message());
        } else {
            error_log('Тема удалена: ' . $slug);
        }
    }
}

// Использование:
wpkit_delete_unused_themes(['reboot']);

Полезные плагины для управления темами

Помимо собственных скриптов, можно использовать плагины, облегчающие работу с темами:

  • WP Reset — позволяет быстро сбрасывать сайт, управлять темами и плагинами, удобно для разработки.
  • Theme Switcha — позволяет переключать темы для разных ролей или устройств, удобно для тестирования.
  • Child Theme Configurator — поможет создавать и настраивать дочерние темы без ручного копирования файлов.

Ссылки на плагины и дополнительные инструменты можно найти на WPShop.ru.

Резюме и рекомендации

Автоматизация управления темами через код — мощный инструмент для разработчиков и системных администраторов WordPress-сайтов. Используйте функции копирования, изменения заголовков и активации тем для масштабируемой работы. Не забывайте про безопасность — удаляйте неиспользуемые темы, чтобы уменьшить поверхность атаки. Для упрощения рутинных задач подключайте проверенные плагины.

Такой подход значительно ускорит процессы разработки и поддержки сайтов на WordPress, особенно при работе с большим количеством ресурсов.

Как создать автоматически обновляемый сайт на WordPress с помощью WPRemark
12.03.2026
WooCommerce: как исключить товары с определёнными атрибутами из корзины
15.05.2026
WooCommerce: как заблокировать оплату при наличии товаров с определёнными атрибутами в корзине
22.05.2026
WooCommerce: автоматическое изменение стоимости товаров при оплате
30.04.2026
Как автоматически удалять старые черновики в WordPress
02.03.2026