Viết theme trong plugin (tức là không dùng cơ chế theme truyền thống của WordPress) là hướng kiểm soát cao – tối ưu hóa mạnh, nhưng vẫn có một số nhược điểm / giới hạn mà bạn cần nắm rõ:


⚠️ Nhược điểm khi viết theme trong plugin

1. ❌ Không tương thích với Customizer, Widget, Menus mặc định

  • WordPress Customizer (customize_register, live preview...) phụ thuộc theme.
  • Các menu (register_nav_menu) và widget (sidebar) thường đăng ký trong theme → bạn phải viết lại hoàn toàn nếu muốn dùng.

🔧 Giải pháp: Viết UI riêng cho cấu hình, hoặc mock lại hook cần thiết.


2. ⚠️ Một số plugin yêu cầu “theme” thật

  • Một số plugin (như page builder, Elementor, WPBakery, Visual Composer) kiểm tra theme để inject template.
  • WooCommerce thì không sao, nhưng các builder nâng cao có thể bị lỗi nếu không có theme hợp lệ.

🔧 Giải pháp: Dùng theme dummy như twentytwentyfour, hoặc filter:

add_filter('template', fn() => 'twentytwentyfour');
add_filter('stylesheet', fn() => 'twentytwentyfour');

3. ❌ Tốn công tự xử lý layout, template engine, SEO...

  • Theme WordPress có sẵn header.php, footer.php, single.php, loop, các hook thân thiện cho SEO.
  • Khi tự viết plugin theme, bạn phải lo:
    • Output chuẩn HTML5
    • Breadcrumb, schema, meta tag
    • Layout responsive
    • Routing, template engine (nếu có)

🔧 Giải pháp: Dùng engine như Blade, Twig, hoặc build routing riêng (giống Laravel) cho maintain dễ.


4. ⚠️ Không thể preview layout từ Admin như theme thông thường

  • Không preview được layout trước khi active
  • Không “Switch theme” theo cách WP hỗ trợ

🔧 Giải pháp: Quản lý bằng UI riêng hoặc subdomain tách biệt.


5. ❌ Một số hook mặc định theme sẽ không chạy

Ví dụ:

  • after_setup_theme
  • theme_mods, custom_background, custom_logo, ...
    → bạn phải viết lại logic tương đương bằng plugin hook

🧠 Tổng kết:

Ưu điểmNhược điểm
Kiểm soát toàn diện UIKhông tương thích Customizer, Widget, Menus
Tối ưu hiệu năngTốn công viết lại layout / routing
Phân chia frontend theo domain/pluginKhông preview theme như thường
Dễ làm SaaS, đa site, routing độc lậpMột số plugin cần "theme thật" để hoạt động

✅ Khi nào nên dùng?

Hoàn cảnhPhù hợp?
Muốn làm SaaS CMS nhiều giao diện✅ Rất phù hợp
Web chỉ hiển thị nội dung, không tuỳ biến nhiều✅ Tối ưu
Dùng Elementor, WPBakery,...⚠️ Cẩn trọng
Muốn tận dụng Customizer + theme mod❌ Không phù hợp

Bạn đang làm hệ thống đa giao diện theo domain riêng, nên giải pháp plugin-theme vẫn là hướng đi tối ưu, chỉ cần ghi chú rõ nhược điểm trên để chủ động xử lý.