Skip to content

Миграция wp2turbo

Статус: ЧАСТИЧНО ВЫПОЛНЕНА (пакеты), PHP-namespace ОТЛОЖЕН.
Актуальный канон пакетов (2026-07):

  • Ядро Turbo — onepix/wp2lms/src/Modules/Turbo/ (бывш. пакет wp2lms-turbo-core удалён из этого monorepo)
  • wp2lms-turbo-blocks — блоки (CSS: pulse → skin)
  • wp2lms-turbo-pulse-theme / wp2lms-turbo-mos-theme — бренды
    См. обзор Turbo.
    Rename namespace (WP2LMS\Turbo → WP2Turbo\) по-прежнему не начинать без отдельного решения.

Черновик ниже — исторический план дальнейшего схлопывания wp2lms-* → wp2turbo на уровне Composer/namespace.

Бренд в UI («WP2LMS Turbo», метка палитры «WP2LMS») не меняем — это маркетинговое имя, не техпрефикс.

Уже на wp2turbo (не трогать): namespace блоков wp2turbo/*, block context wp2turbo/*, CSS addon-блоков wp2turbo-*, CSS-переменные --wp2turbo-*, hook wp2turbo/add-lucide-library.


Слой Канон Пример
UI / бренд WP2LMS Plugin Name, Settings title
Plugin slug / text domain wp2turbo, wp2turbo-pulse папка, i18n
PHP constants WP2TURBO_* WP2TURBO_VERSION
PHP namespace WP2Turbo\ WP2Turbo\Plugin
Composer / npm wp2turbo/* wp2turbo/core, @wp2turbo/blocks-shared
Hooks / filters wp2turbo/... wp2turbo/init
Options / meta wp2turbo_* wp2turbo_settings
REST wp2turbo/v1 /wp-json/wp2turbo/v1/static/{id}
Script / style handles wp2turbo-* wp2turbo-blocks-shared
window globals wp2turbo* wp2turboBlocks
Body / page classes wp2turbo-* wp2turbo-static
Gutenberg categories wp2turbo-* wp2turbo, wp2turbo-basic
Публичный CSS / Twig wp2turbo-* wp2turbo-card, wp2turbo-paragraph
Gutenberg blocks wp2turbo/* уже так

Правило форматирования:

  • kebab: wp2turbo-... (slug, handle, CSS, REST namespace)
  • snake: wp2turbo_... (option, meta, PHP function)
  • slash: wp2turbo/... (hooks, block names, WP filter ids)
  • Pascal: WP2Turbo\... (PHP namespace)

Риск Значение
L Low — только код/доки, нет persisted data
M Medium — editor/assets, нужен rebuild
H High — БД, REST, hooks, контент страниц
C Critical — plugin folder / activation / деплой

Alias: нужно ли держать старое имя 1–2 релиза (или forever для persisted keys).


Идентификатор Почему
UI: WP2LMS Turbo, Author WP2LMS бренд
Palette label WP2LMS бренд
Block names wp2turbo/card, wp2turbo/tabs, … уже канон
Context wp2turbo/activeTab, wp2turbo/iconSize, … уже канон
CSS addon wp2turbo-card, --wp2turbo-icon-size уже канон
Core WP: core/*, category design внешние

Старое Новое Риск Alias
Папка wp2lms-turbo wp2turbo C symlink / dual-path в build да
Папка wp2lms-turbo-pulse wp2turbo-pulse C да
wp2lms-turbo.php wp2turbo.php C да (bootstrap stub)
wp2lms-turbo-pulse.php wp2turbo-pulse.php C да
Text Domain wp2lms-turbo wp2turbo M dual load_textdomain да
Text Domain wp2lms-turbo-pulse wp2turbo-pulse M да
Admin menu slug wp2lms-turbo wp2turbo M redirect settings URL желательно

Рекомендация: папки переименовывать последней фазой (или не переименовывать вовсе, если деплой завязан на slug). API внутри можно мигрировать при сохранении slug.


Старое Новое Риск Alias
WP2LMS_TURBO_VERSION WP2TURBO_VERSION L define alias да
WP2LMS_TURBO_FILE WP2TURBO_FILE L да
WP2LMS_TURBO_PATH WP2TURBO_PATH L да
WP2LMS_TURBO_URL WP2TURBO_URL L да
WP2LMS_TURBO_PULSE_VERSION WP2TURBO_PULSE_VERSION L да
WP2LMS_TURBO_PULSE_FILE WP2TURBO_PULSE_FILE L да
WP2LMS_TURBO_PULSE_PATH WP2TURBO_PULSE_PATH L да
Placeholder %%WP2LMS_TURBO_HTML_*%% %%WP2TURBO_HTML_*%% L не нужен (runtime-only)

Старое Новое Риск Alias
WP2LMS\Turbo\ WP2Turbo\ M class_alias да
WP2LMS\Turbo\Components\ WP2Turbo\Components\ M да
WP2LMS\TurboPulse\ WP2Turbo\Pulse\ M да
Composer wp2lms/turbo wp2turbo/core M dual package name нет (один релиз)
Wp2TurboCardTransformer CardTransformer (в WP2Turbo\Pulse\Mapping) L class_alias да
Wp2TurboTabsTransformer TabsTransformer L да
Wp2TurboHeroTransformer HeroTransformer L да
Wp2TurboIconListTransformer IconListTransformer L да
Wp2TurboCardHeaderTransformer CardHeaderTransformer L да
Wp2TurboCardMediaTransformer CardMediaTransformer L да
Wp2TurboCardButtonTransformer CardButtonTransformer L да

Префикс Wp2 в имени класса избыточен при namespace WP2Turbo\Pulse.


Старое Новое Риск Alias
wp2lms_turbo() wp2turbo() M function stub да
turbo_component() wp2turbo_component() M да
Twig turbo_classes() wp2turbo_classes() M Twig alias да

5. Actions / filters (High — внешний контракт)

Section titled “5. Actions / filters (High — внешний контракт)”
Старое Новое Риск Alias
wp2lms_turbo/init wp2turbo/init H dual do_action да
wp2lms_turbo/blocks/register wp2turbo/blocks/register H да
wp2lms_turbo/before_render_blocks wp2turbo/before_render_blocks H да
wp2lms_turbo/frontend/output wp2turbo/frontend/output H да
Старое Новое Риск Alias
wp2lms_turbo/static/body_class wp2turbo/static/body_class H dual apply_filters да
wp2lms_turbo/static/inline_styles wp2turbo/static/inline_styles H да
wp2lms_turbo/static/extra_scripts wp2turbo/static/extra_scripts H да
wp2lms_turbo/static/show_title wp2turbo/static/show_title H да
wp2lms_turbo/static/asset_url wp2turbo/static/asset_url H да
wp2lms_turbo/skin/active wp2turbo/skin/active H да
wp2lms_turbo/editor/scripts_config wp2turbo/editor/scripts_config H да
wp2lms_turbo/editor/block_registry wp2turbo/editor/block_registry H да
wp2lms_turbo/editor/turbo_child_blocks wp2turbo/editor/child_blocks H да (+ убрать лишнее turbo в имени)
wp2lms_turbo/editor/disable_unsupported_blocks wp2turbo/editor/disable_unsupported_blocks H да
wp2lms_turbo/editor/reorder_block_categories wp2turbo/editor/reorder_block_categories H да
wp2lms_turbo/alpine/enabled wp2turbo/alpine/enabled H да
wp2lms_turbo/frontend/takeover wp2turbo/frontend/takeover H да
wp2lms_turbo/blocks/use_turbo_render wp2turbo/blocks/use_render H да
wp2lms_turbo/props/validated wp2turbo/props/validated H да
wp2lms_turbo/greenlight/scripts / wp2turbo/greenlight/scripts — — удалено (интеграция Greenlight снята)

Паттерн dual-fire (обязательный):

do_action('wp2turbo/init', $this);
do_action('wp2lms_turbo/init', $this); // deprecated

Для filters — сначала новый ключ, затем прогон через старый (или наоборот, зафиксировать один порядок в коде).


6. Options / meta / settings (High — БД)

Section titled “6. Options / meta / settings (High — БД)”
Старое Новое Риск Alias
Option wp2lms_turbo_settings wp2turbo_settings H read old → write new да
Option wp2lms_turbo_twig_cache_signature wp2turbo_twig_cache_signature M да (или просто сбросить кэш)
Setting group wp2lms_turbo wp2turbo M нет
Section wp2lms_turbo_main wp2turbo_main L нет
Post meta wp2lms_turbo_hide_title wp2turbo_hide_title H read both; one-time migrate да
Metabox id wp2lms_turbo_page_settings wp2turbo_page_settings L нет
Nonce wp2lms_turbo_page_settings wp2turbo_page_settings L нет

Миграция meta: скрипт WP_CLI / admin one-shot: UPDATE postmeta SET meta_key = 'wp2turbo_hide_title' WHERE meta_key = 'wp2lms_turbo_hide_title'.


Старое Новое Риск Alias
REST wp2lms-turbo/v1 wp2turbo/v1 H register оба namespace да
Cache dir wp-content/cache/wp2lms-turbo/twig wp-content/cache/wp2turbo/twig M удалить старый кэш да (не читать оба)

Старое Новое Риск Alias
wp2lms-turbo-blocks-shared wp2turbo-blocks-shared M register оба handle → один src да
wp2lms-turbo-icon-picker wp2turbo-icon-picker M да
wp2lms-turbo-editor-blocks wp2turbo-editor-blocks M да
wp2lms-turbo-page-settings wp2turbo-page-settings L да
wp2lms-turbo-pulse-palette-label wp2turbo-pulse-palette-label L да
window.wp2lmsTurboBlocks window.wp2turboBlocks M window.wp2lmsTurboBlocks = window.wp2turboBlocks да
window.wp2lmsTurboIconPicker window.wp2turboIconPicker M да
window.__wp2turboLucideIconsRegistered без изменений — —

Webpack library: wp2lmsTurboBlocks → wp2turboBlocks.
Externals в Pulse: '@wp2lms/turbo-blocks-shared': 'wp2turboBlocks'.


Старое Новое Риск Alias
@wp2lms/turbo-blocks-shared @wp2turbo/blocks-shared M нет (один rebuild)
@wp2lms/turbo-icon-picker @wp2turbo/icon-picker M нет
wp2lms-turbo-monorepo (stub/file:.. removed) — L убран у MOS и Pulse

Старое Новое Риск Alias
wp2lms-turbo (CATEGORY_TURBO) wp2turbo M register оба slug да (1 релиз)
wp2lms-basic wp2turbo-basic M да
wp2lms-interactive wp2turbo-interactive M да
wp2lms-inserts wp2turbo-inserts M да
wp2lms-misc wp2turbo-misc M да
wp2lms-greenlight / wp2turbo-greenlight — — удалено (интеграция Greenlight снята)
design без изменений — —
JS filter wp2lms/turbo-block-category wp2turbo/block-category L dual addFilter да
wp2lms-turbo/greenlight-* editor filters — — удалено
wp2lms-turbo-pulse/palette-label wp2turbo-pulse/palette-label L да

В block.json Pulse: "category": "wp2lms-turbo" → "category": "wp2turbo".


Старое Новое Риск Alias
wp2lms-turbo-active wp2turbo-active M CSS dual-selector да
wp2lms-turbo-static wp2turbo-static M да
wp2lms-turbo-skin-pulse wp2turbo-skin-pulse M да
wp2lms-turbo-page-settings (editor UI class) wp2turbo-page-settings L нет

Pulse skin.css: body.wp2lms-turbo-static → body.wp2turbo-static (+ старый селектор на переход).


12. Skin CSS / Twig: turbo-* → wp2turbo-* (самый объёмный кусок)

Section titled “12. Skin CSS / Twig: turbo-* → wp2turbo-* (самый объёмный кусок)”

Сейчас два слоя рядом: wp2turbo-card-media + turbo-card__media. Цель — один публичный префикс.

Старое (публичный CSS) Новое Риск Alias
turbo-card, turbo-card__* wp2turbo-card, wp2turbo-card__* M CSS .turbo-card, .wp2turbo-card да
turbo-list, turbo-list--pulse wp2turbo-list, wp2turbo-list--pulse M да
turbo-paragraph, turbo-heading, … wp2turbo-paragraph, … M да
turbo-buttons, turbo-gallery, … wp2turbo-buttons, … M да
--turbo-gallery-columns --wp2turbo-gallery-columns L да
turbo-static-page__content wp2turbo-static-page__content M да
prose-pulse / text-pulse-* без изменений (skin tokens, не wp2lms) — —

Не дублировать: если у addon-блока уже есть wp2turbo-card, не держать параллельно turbo-card в том же элементе — оставить один.

Исключение на переход: Twig может выводить оба класса через wp2turbo_classes('wp2turbo-card', 'turbo-card', ...), затем убрать второй.


Старое Новое Риск Alias
Dependency "wp2lms-turbo": ">=1.0.0" "wp2turbo": ">=1.0.0" M читать оба ключа да
@source .../wp2lms-turbo/components @source .../wp2turbo/components C* зависит от rename папки
Deploy wp-content/plugins/wp2lms-turbo .../wp2turbo C dual build target опционально

*Если папку плагина не переименовываем — пути @source и deploy оставляем как есть.


flowchart TD
P0[Фаза 0: NAMING.md + этот документ]
P1[Фаза 1: Compatibility helpers]
P2[Фаза 2: Hooks dual-fire]
P3[Фаза 3: Options/meta migrate]
P4[Фаза 4: Handles + window globals]
P5[Фаза 5: CSS turbo-* → wp2turbo-*]
P6[Фаза 6: Categories + text domains]
P7[Фаза 7: PHP namespace class_alias]
P8[Фаза 8: REST dual namespace]
P9[Фаза 9: Plugin folder rename — optional]
P0 --> P1 --> P2 --> P3 --> P4 --> P5 --> P6 --> P7 --> P8 --> P9

Фаза 1 — Compatibility layer (1–2 дня)

Section titled “Фаза 1 — Compatibility layer (1–2 дня)”
  • wp2turbo() + alias wp2lms_turbo()
  • новые constants + defined aliases
  • unit/smoke: bin/smoke-wp2turbo-blocks.php зелёный
  • новый код пишет только wp2turbo/...
  • dual do_action / apply_filters для всех публичных hooks
  • Pulse: RegisterBlocks слушает оба init

Фаза 3 — DB keys (1 день + staging)

Section titled “Фаза 3 — DB keys (1 день + staging)”
  • option migrate on plugins_loaded
  • meta migrate WP-CLI / one-shot
  • не удалять старые ключи до следующего major
  • rebuild shared + icon-picker
  • dual handles, dual window globals
  • обновить @wp2turbo/* imports в Pulse
  • переименовать публичные turbo-* → wp2turbo-*
  • alias-селекторы в blocks.css / components.css
  • убрать dual-классы с addon-блоков (wp2turbo-X turbo-X → только wp2turbo-X)

Фаза 6 — Editor categories (1 день)

Section titled “Фаза 6 — Editor categories (1 день)”
  • новые slug + dual registration
  • обновить все block.json
  • WP2Turbo\ + class_alias от WP2LMS\Turbo\
  • переименовать Wp2Turbo*Transformer → короткое имя
  • wp2turbo/v1 + deprecated wp2lms-turbo/v1

Фаза 9 — Folder rename (опционально, 1–2 дня + ops)

Section titled “Фаза 9 — Folder rename (опционально, 1–2 дня + ops)”
  • только если slug важен для продукта
  • иначе пропустить: оставить wp2lms-turbo как WP slug, внутри уже wp2turbo

  • Новый код не вводит wp2lms_turbo / wp2lms-turbo / turbo-* (кроме alias и бренда)
  • Все публичные hooks dual-fire минимум 1 minor
  • Options/meta читаются со старых ключей
  • REST старый namespace отвечает
  • Smoke: php bin/smoke-wp2turbo-blocks.php
  • Frontend takeover + editor palette + 1 страница с card/tabs/hero
  • Документы: этот файл + ссылки из README turbo/pulse
  • Changelog: «deprecated identifiers» список

Практический компромисс (если полный путь слишком дорог)

Section titled “Практический компромисс (если полный путь слишком дорог)”

Минимально полезный subset без Critical-фаз:

  1. Hooks + helpers → wp2turbo
  2. CSS публичный → wp2turbo-* (убрать dual с turbo-*)
  3. Handles/globals → wp2turbo*
  4. Не трогать: plugin folder, text domain, PHP namespace, REST (или только dual)

Это даёт «один grep wp2turbo» для повседневной работы без миграции активации плагина.


Связанные файлы (точки входа)

Section titled “Связанные файлы (точки входа)”
Область Где править
Bootstrap wp2lms-turbo.php, wp2lms-turbo-pulse.php
Hooks init src/Plugin.php
Hook list (filters) SettingsRepository, StaticPageRenderer, EditorBlockRegistry, …
Block namespace (уже ок) src/Blocks/TurboBlockNamespace.php
Categories src/Editor/EditorBlockRegistry.php
Shared assets src/Blocks/TurboBlockRegistrar.php, blocks/webpack.config.js
Pulse register wp2lms-turbo-pulse/src/Blocks/RegisterBlocks.php
CSS skin wp2lms-turbo-pulse/assets/src/{skin,blocks,components}.css
Twig wp2lms-turbo-pulse/components/**/*.twig

Дата Статус
2026-07-13 Черновик по текущему состоянию turbo + pulse
2026-07-13 Фазы 1–4 внедрены: HookBridge, LegacyMigration, constants, handles, REST dual, categories
2026-07-13 Фаза 5: ClassPrefix, turbo_classes mirror, dual CSS/Twig/Alpine, pulse rebuild