Миграция 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).
0. Не менять
Заголовок раздела «0. Не менять»| Идентификатор | Почему |
|---|---|
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 |
внешние |
1. Plugin identity (Critical)
Заголовок раздела «1. Plugin identity (Critical)»| Старое | Новое | Риск | 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.
2. PHP constants
Заголовок раздела «2. PHP constants»| Старое | Новое | Риск | 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) |
3. PHP namespaces / classes
Заголовок раздела «3. PHP namespaces / classes»| Старое | Новое | Риск | 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.
4. PHP helpers
Заголовок раздела «4. PHP helpers»| Старое | Новое | Риск | Alias |
|---|---|---|---|
wp2lms_turbo() |
wp2turbo() |
M | function stub да |
turbo_component() |
wp2turbo_component() |
M | да |
Twig turbo_classes() |
wp2turbo_classes() |
M | Twig alias да |
5. Actions / filters (High — внешний контракт)
Заголовок раздела «5. Actions / filters (High — внешний контракт)»Actions
Заголовок раздела «Actions»| Старое | Новое | Риск | 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 | да |
Filters
Заголовок раздела «Filters»| Старое | Новое | Риск | 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 — БД)
Заголовок раздела «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'.
7. REST / filesystem cache
Заголовок раздела «7. REST / filesystem cache»| Старое | Новое | Риск | Alias |
|---|---|---|---|
REST wp2lms-turbo/v1 |
wp2turbo/v1 |
H | register оба namespace да |
Cache dir wp-content/cache/wp2lms-turbo/twig |
wp-content/cache/wp2turbo/twig |
M | удалить старый кэш да (не читать оба) |
8. Script / style handles / JS globals
Заголовок раздела «8. Script / style handles / JS globals»| Старое | Новое | Риск | 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'.
9. npm / package names
Заголовок раздела «9. npm / package names»| Старое | Новое | Риск | Alias |
|---|---|---|---|
@wp2lms/turbo-blocks-shared |
@wp2turbo/blocks-shared |
M | нет (один rebuild) |
@wp2lms/turbo-icon-picker |
@wp2turbo/icon-picker |
M | нет |
wp2lms-turbo-monorepofile:.. removed) |
— | L | убран у MOS и Pulse |
10. Gutenberg categories / editor hooks
Заголовок раздела «10. Gutenberg categories / editor hooks»| Старое | Новое | Риск | 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".
11. Body / layout classes
Заголовок раздела «11. Body / layout classes»| Старое | Новое | Риск | 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-* (самый объёмный кусок)
Заголовок раздела «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', ...), затем убрать второй.
13. skin.json / build paths
Заголовок раздела «13. skin.json / build paths»| Старое | Новое | Риск | 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 оставляем как есть.
Порядок фаз (без big-bang)
Заголовок раздела «Порядок фаз (без big-bang)»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 дня)
Заголовок раздела «Фаза 1 — Compatibility layer (1–2 дня)»wp2turbo()+ aliaswp2lms_turbo()- новые constants +
definedaliases - unit/smoke:
bin/smoke-wp2turbo-blocks.phpзелёный
Фаза 2 — Hooks (1 день)
Заголовок раздела «Фаза 2 — Hooks (1 день)»- новый код пишет только
wp2turbo/... - dual
do_action/apply_filtersдля всех публичных hooks - Pulse:
RegisterBlocksслушает обаinit
Фаза 3 — DB keys (1 день + staging)
Заголовок раздела «Фаза 3 — DB keys (1 день + staging)»- option migrate on
plugins_loaded - meta migrate WP-CLI / one-shot
- не удалять старые ключи до следующего major
Фаза 4 — Assets (1–2 дня)
Заголовок раздела «Фаза 4 — Assets (1–2 дня)»- rebuild shared + icon-picker
- dual handles, dual window globals
- обновить
@wp2turbo/*imports в Pulse
Фаза 5 — CSS/Twig (3–5 дней)
Заголовок раздела «Фаза 5 — CSS/Twig (3–5 дней)»- переименовать публичные
turbo-*→wp2turbo-* - alias-селекторы в
blocks.css/components.css - убрать dual-классы с addon-блоков (
wp2turbo-X turbo-X→ толькоwp2turbo-X)
Фаза 6 — Editor categories (1 день)
Заголовок раздела «Фаза 6 — Editor categories (1 день)»- новые slug + dual registration
- обновить все
block.json
Фаза 7 — Namespaces (2–3 дня)
Заголовок раздела «Фаза 7 — Namespaces (2–3 дня)»WP2Turbo\+class_aliasотWP2LMS\Turbo\- переименовать
Wp2Turbo*Transformer→ короткое имя
Фаза 8 — REST (полдня)
Заголовок раздела «Фаза 8 — REST (полдня)»wp2turbo/v1+ deprecatedwp2lms-turbo/v1
Фаза 9 — Folder rename (опционально, 1–2 дня + ops)
Заголовок раздела «Фаза 9 — Folder rename (опционально, 1–2 дня + ops)»- только если slug важен для продукта
- иначе пропустить: оставить
wp2lms-turboкак WP slug, внутри ужеwp2turbo
Definition of Done
Заголовок раздела «Definition of Done»- Новый код не вводит
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» список
Практический компромисс (если полный путь слишком дорог)
Заголовок раздела «Практический компромисс (если полный путь слишком дорог)»Минимально полезный subset без Critical-фаз:
- Hooks + helpers →
wp2turbo - CSS публичный →
wp2turbo-*(убрать dual сturbo-*) - Handles/globals →
wp2turbo* - Не трогать: plugin folder, text domain, PHP namespace, REST (или только dual)
Это даёт «один grep wp2turbo» для повседневной работы без миграции активации плагина.
Связанные файлы (точки входа)
Заголовок раздела «Связанные файлы (точки входа)»| Область | Где править |
|---|---|
| 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 |