WordPress Gutenberg: trình soạn thảo khối và bài toán cổng thông báo nội bộ
Đăng ngày 12/10/2026
Mục lục bài nghiên cứu

Gutenberg trong một trang: trình soạn thảo khối và những điều cần cân nhắc trước khi dùng
Gutenberg là kho mã của trình soạn thảo khối (block editor) trong hệ sinh thái WordPress. README mô tả dự án như nơi phát triển trung tâm cho một cách làm mới về xây dựng và xuất bản website, trong đó mỗi phần nội dung, từ đoạn văn đến bộ ảnh hay tiêu đề, là một khối riêng có thể thêm, sắp xếp và dùng lại.
Phạm vi là phần trình soạn thảo, mô hình dữ liệu khối, các gói JavaScript và cơ chế kiểm soát giao diện soạn thảo. Với một tổ chức đã có WordPress hoặc cần một cổng thông tin nội dung có thể chỉnh sửa bằng khối, đây là phần đáng đọc kỹ vì nó quyết định cách nội dung được lưu, kiểm soát và mở rộng. [3][6]
Khuyến nghị của bài viết: cân nhắc Gutenberg khi bạn cần soạn thảo trực quan, chuẩn hóa bố cục bằng mẫu khối (pattern) và khóa khối, đồng thời chấp nhận lưu nội dung dưới dạng HTML có chú thích khối trong cơ sở dữ liệu WordPress. Không nên chọn nó chỉ để có một công cụ viết tài liệu độc lập, vì phần lớn tài liệu kiến trúc giả định môi trường WordPress với bài viết, mẫu giao diện và quyền người dùng. [5][10]
Vì sao nội dung web cần đơn vị nhỏ hơn một trang HTML
Trước khi có trình soạn thảo khối, người viết trong WordPress thường phải dùng shortcode hoặc chèn HTML tùy chỉnh để tạo bố cục phức tạp. README của dự án nói thẳng rằng cách tiếp cận khối nhằm tránh những giải pháp tạm như vậy: mỗi thành phần nội dung là một khối và người dùng dựng trang bằng thao tác thêm, sắp xếp lại. [1]
Vấn đề thực tế đằng sau câu chuyện này là sự lệch pha giữa người viết và người chịu trách nhiệm giao diện. Người viết muốn thay đổi nội dung nhanh, còn bộ phận phụ trách thương hiệu hoặc tuân thủ muốn bố cục, màu sắc và cấu trúc không bị phá. Một ô soạn thảo văn bản tự do khó đáp ứng cả hai. Tài liệu khái niệm của Gutenberg trả lời bằng cách coi khối là đơn vị có giao diện thống nhất: chèn, di chuyển, nhân bản, biến đổi và dùng lại. [7]
Ba lớp gói editor và mô hình module của kho mã
Tài liệu kiến trúc chia nội dung thành hai nhóm: bản thân trình soạn thảo, và cấu trúc của kho mã Gutenberg. Nhóm đầu gồm khái niệm chính, định dạng dữ liệu, thực thể và hoàn tác, mẫu trang của trình soạn thảo site, kiểu dáng, hiệu năng và xử lý media phía máy khách.
Điểm đáng chú ý nhất là tính module. Tài liệu Modularity cho biết kho được xây thành nhiều gói độc lập, công bố đều đặn trên npm, mỗi gói có API công khai rõ ràng. Lợi ích nêu ra gồm: người đóng góp có thể tập trung vào từng gói, người dùng cuối chỉ tải script cần thiết cho từng màn hình quản trị, và nhà phát triển bên thứ ba có thể dùng lại gói trong hoặc ngoài WordPress. [10]
Riêng trình soạn thảo bài viết được dựng thành ba gói xếp lớp. Gói block-editor cung cấp thành phần để triển khai một trình soạn khối trên giá trị nguyên thủy là mảng đối tượng khối, không biết gì về cách lưu hay về một website WordPress. Gói editor bổ sung khái niệm bài viết, gắn việc tải và lưu với nội dung bài. Gói edit-post là màn hình Bài viết mới trong trang quản trị, lo bố cục tổng thể. Cách tách này cho phép dùng block-editor độc lập, ví dụ cho một trình soạn bình luận, theo ví dụ trong chính tài liệu. [10]

Từ khối trong bộ nhớ đến chú thích HTML trong post_content
Luồng dữ liệu của Gutenberg bắt đầu từ một ý tưởng dễ gây nhầm: bài viết trong trình soạn thảo là một cây đối tượng khối tồn tại trong bộ nhớ, còn thứ được lưu là post_content. Mỗi đối tượng khối có clientId, loại khối, thuộc tính và danh sách khối con. Khi lưu, cây này được tuần tự hóa thành HTML với chú thích HTML làm dấu phân cách, thuộc tính khối nằm trong chú thích dưới dạng JSON. [6]
Tài liệu giải thích lý do chọn chú thích: chúng không thể xuất hiện ở các vị trí gây mơ hồ như bên trong thuộc tính HTML, cú pháp đơn giản để phân tích, và trình phân tích không cần hiểu đầy đủ HTML. Ranh giới tường minh cũng giúp lỗi trong một khối không lan sang khối khác và cho phép nhận diện khối chưa được đăng ký trước khi hiển thị. Khi mở lại bài, một văn phạm hình thức định nghĩa cách nạp chuỗi đã lưu về cây khối. [6]
Hệ quả cho người vận hành: nguồn sự thật duy nhất là post_content, không có kho cây đối tượng riêng cần đồng bộ. Tuy vậy, nếu hiển thị HTML đã lưu mà thiếu bộ máy khối, khối động có thể không tải và phần tương tác có thể chỉ còn là nội dung tĩnh. [6]
Những gì tài liệu xác nhận về khối, mẫu, kiểu dáng và đăng ký khối
Về khối, tài liệu khái niệm nêu các khả năng đã có: lồng khối qua API InnerBlocks, biến đổi khối này sang khối khác kể cả với nhiều khối được chọn, biến thể khối là tập thuộc tính khởi tạo định sẵn, và phân biệt khối tĩnh với khối động cần dữ liệu và kết xuất phía máy chủ. Khối tái sử dụng được lưu như một loại bài ẩn wp_block, còn mẫu khối (pattern) khi chèn vào thì không còn đồng bộ với bản gốc. [7]
Về đăng ký khối, từ WordPress 5.8 tệp block.json được khuyến nghị là cách chuẩn để đăng ký khối cho cả PHP và JavaScript. Tệp này khai báo tên, thuộc tính, ngữ cảnh, hỗ trợ giao diện, kiểu, biến thể và đường dẫn script, style, cùng tệp render.php cho kết xuất phía máy chủ. Tài liệu nêu lợi ích: tài sản giao diện chỉ được nạp khi khối có trên trang nếu chủ đề hỗ trợ nạp lười, thư mục plugin nhận diện được khối, và lược đồ JSON giúp trình soạn mã gợi ý. [8]
Tài liệu đăng ký bằng JavaScript lưu ý một chi tiết dễ bị xem nhẹ: tên khối được ghi trong chú thích phân cách của mọi bài dùng khối đó, nên đổi tên về sau đòi hỏi sửa hàng loạt bài hoặc chạy script cơ sở dữ liệu. Vì vậy cần chọn tiền tố namespace riêng cho plugin hoặc chủ đề ngay từ đầu. [9]
Về kiểu dáng, tài liệu mô tả block supports, global styles qua theme.json và kiểu bố cục. Tài liệu cũng liệt kê hạn chế hiện hành, chẳng hạn mỗi khối chỉ có một thể hiện cho mỗi loại kiểu và kiểu được tuần tự hóa vào nút bao ngoài. [4]

Ai nên đọc kỹ tài liệu này và ai có thể bỏ qua
Nhóm đối tượng rõ nhất là những đội đã chạy WordPress và muốn kiểm soát trải nghiệm biên tập: đơn vị có nhiều người viết nhưng ít người thiết kế, bộ phận truyền thông cần mẫu trang đồng nhất, hoặc đội phát triển viết khối riêng bằng block.json và React. Các chủ đề khối và mẫu khối đều xoay quanh cùng mô hình dữ liệu. [7][8]
Nhóm có thể bỏ qua gồm các đơn vị chỉ cần ghi chú cá nhân, wiki Markdown hoặc tài liệu cộng tác thời gian thực kiểu văn bản chung. README liệt kê cộng tác thời gian thực trong lộ trình giai đoạn ba, nghĩa là đó là hướng phát triển chứ không phải điều có thể mặc định dựa vào khi lập kế hoạch. Tương tự, ai cần quy trình phê duyệt nhiều cấp có lưu vết pháp lý sẽ phải bổ sung từ plugin hoặc hệ thống ngoài. [1]
Giả định: cổng thông báo nội bộ của một công ty chứng khoán không giao dịch
Tình huống dưới đây là đề xuất ứng dụng, không phải trường hợp đã triển khai. Hãy hình dung một công ty chứng khoán cỡ vừa tại Hà Nội, chỉ dùng hệ thống nội bộ cho khối vận hành và tuân thủ, không có chức năng giao dịch, không kết nối sổ lệnh hay tài khoản khách hàng.
Vấn đề thực tế của đơn vị này là thông báo quan trọng thường nằm rải rác trong email và tệp chia sẻ, mỗi phòng ban định dạng một kiểu. Phòng Tuân thủ muốn mỗi thông báo luôn có đủ các phần cố định: phạm vi áp dụng, ngày hiệu lực, người chịu trách nhiệm, tài liệu đính kèm. Đề xuất là dựng một mẫu khối cho từng loại thông báo, khóa các khối khung và để người soạn chỉ điền nội dung. [7][11]
Cụ thể, đội kỹ thuật có thể đăng ký vài khối riêng bằng block.json với namespace riêng của công ty, chẳng hạn khối Hiệu lực và Người phụ trách, đặt trong một mẫu khối được khóa di chuyển và xóa. Chế độ contentOnly giúp người soạn không đụng vào bố cục. Quyền khóa và mở khóa có thể giới hạn cho vai trò quản trị thông qua bộ lọc cài đặt trình soạn thảo. Tài liệu xác nhận các cơ chế này, còn việc chúng đủ cho quy trình tuân thủ của một công ty chứng khoán hay không phải được kiểm tra riêng. [8][11]
Ranh giới cần giữ rõ: cổng này không nên chứa dữ liệu khách hàng hay thông tin lệnh. Các thông báo có nội dung nhạy cảm cần phân loại tài liệu theo chính sách của công ty và quy định hiện hành mà bài viết không đánh giá. Nếu có yêu cầu lưu vết phê duyệt, nên coi đó là một hạng mục thiết kế riêng, không dựa vào lịch sử hoàn tác của trình soạn thảo, vốn phục vụ thao tác chỉnh sửa chứ không phải nhật ký kiểm toán. [5]
Triển khai và vận hành: hai đường dùng Gutenberg
Có hai đường chính để dùng dự án. Đường thứ nhất là cài plugin Gutenberg từ trang plugin trong wp-admin hoặc tải từ kho plugin của WordPress.org, theo hướng dẫn trong README. Đường thứ hai là dùng trình soạn thảo đã đi kèm bản WordPress đang chạy và chỉ đọc kho mã như tài liệu tham chiếu. Bài viết khuyến nghị đường thứ hai cho môi trường cần ổn định, vì plugin là nơi thử các tính năng mới nhất theo mô tả của README. [1]
Với đội phát triển khối riêng, vòng đời công việc xoay quanh khai báo phụ thuộc script, đăng ký khối phía máy chủ và quản lý tài sản giao diện. Tài liệu block.json nêu rằng kết xuất phía máy chủ qua render.php chạy cho mỗi thể hiện của khối khi tạo HTML trang, nên hàm hoặc lớp khai báo trong tệp cần được xử lý cẩn thận để tránh lỗi trùng định nghĩa. [8]
Về nâng cấp, rủi ro cụ thể là khối đã lưu trong nội dung cũ. Vì tên khối nằm trong chú thích của mọi bài, đổi tên hoặc thay đổi cấu trúc lưu có thể làm khối được coi là không hợp lệ. Đội vận hành nên có tập bài mẫu để kiểm tra hồi quy mỗi lần nâng cấp. [6][9]
Bảo mật và quyền riêng tư: những gì tài liệu nói và những gì không nói
Các tài liệu đã đọc không phải là hướng dẫn bảo mật. Kết luận an toàn cho từng triển khai phải dựa vào chính sách của đơn vị, bản vá WordPress, cấu hình máy chủ và đánh giá riêng.
Điểm thứ nhất là quyền khóa khối. Mặc định quản trị viên có quyền khóa và mở khóa khối, và nhà phát triển có thể đổi giá trị canLockBlocks qua bộ lọc block_editor_settings_all, ví dụ chỉ cho người có quyền chỉnh giao diện. Tài liệu cũng nói rằng người có quyền sửa thường có thể mở khóa khối trong mẫu theo mặc định, nên khóa là công cụ giữ nhất quán chứ không phải rào chắn bảo mật cho nội dung. [11]
Điểm thứ hai là dữ liệu nằm trong post_content dưới dạng HTML và JSON trong chú thích. Điều này giúp công cụ cũ đọc được, nhưng cũng nghĩa là mọi người có quyền đọc bài viết đều có thể thấy thuộc tính khối; không nên đặt bí mật vào thuộc tính khối. Tài liệu không nói gì về mã hóa nội dung, nên đây là suy luận từ mô hình lưu trữ chứ không phải tuyên bố của dự án. [6]
GPL, giấy phép kép đang chuyển tiếp và phạm vi của văn bản
Tệp LICENSE.md tại commit này nêu hai tầng. Với đóng góp từ ngày 15/4/2021 trở đi, mã được cấp theo cả hai giấy phép: GNU GPL phiên bản 2 hoặc mới hơn theo lựa chọn, và Mozilla Public License 2.0. Giấy phép dự án vẫn được ghi là GPL, không bị ảnh hưởng bởi giấy phép đóng góp. [2]
Phần Dual License của tệp giải thích đây là quá trình hai bước: xin phép các tác giả trước ngày 15/4/2021 để cấp phép kép, và áp dụng giấy phép kép cho đóng góp mới. Văn bản viết rằng khi nhận đủ quyền, giấy phép dự án sẽ đổi sang lựa chọn GPL hoặc MPL. Tại commit đã đọc, văn bản vẫn dùng thì hiện tại cho quá trình này và chưa thể hiện việc chuyển đổi đã hoàn tất, nên bài viết không kết luận rằng toàn bộ kho đã được cấp phép kép. [2]
Phạm vi: văn bản giấy phép áp dụng cho mã tại commit này. Nó không bao trùm plugin và chủ đề bên thứ ba, nội dung người dùng, phông chữ hay hình ảnh tải riêng, dịch vụ lưu trữ, hay các phụ thuộc có giấy phép riêng. Không có tệp phạm vi giấy phép bổ sung nào trong dữ liệu đã thu thập. Bài viết không phải tư vấn pháp lý; nếu định phân phối sản phẩm có nhúng mã, cần luật sư xem xét nghĩa vụ GPL.
Chi phí và nguồn lực: giả định và loại tài nguyên
Về nhân sự, cần một người quản trị WordPress chịu trách nhiệm cập nhật và sao lưu, một lập trình viên biết PHP và React cho vài khối riêng, và một người sở hữu nội dung từ phòng tuân thủ để định nghĩa mẫu.
Về hạ tầng, loại tài nguyên gồm máy chủ web chạy PHP và cơ sở dữ liệu, bản sao lưu, môi trường thử nghiệm tách biệt, và kênh truy cập nội bộ như VPN hoặc đăng nhập tập trung. Với cổng nội bộ vài trăm người, đây là cấu hình nhỏ, nhưng bài viết không đưa ra thông số cụ thể vì không có nguồn.
Về thời gian vận hành, nên dự trù giờ cho kiểm thử hồi quy mỗi khi nâng cấp, cho đào tạo người soạn và cho rà soát khối khi có thay đổi mẫu. Chi phí ẩn lớn nhất thường là kỷ luật nội dung: ai duyệt, ai gỡ thông báo hết hiệu lực.
So sánh theo cách tiếp cận, không xếp hạng sản phẩm
Cách tiếp cận thứ nhất là trình soạn thảo khối trên nền WordPress, đúng như Gutenberg. Ưu điểm theo tài liệu là nội dung lưu thành HTML có chú thích, tương thích công cụ cũ, cùng hệ sinh thái khối và mẫu. Đổi lại là bạn chấp nhận mô hình bài viết, quyền và plugin của WordPress. [6][7]
Cách thứ hai là wiki hoặc kho Markdown có kiểm soát phiên bản, như các công cụ tài liệu kỹ thuật. Chúng hợp với nội dung do kỹ sư viết và cần lịch sử thay đổi chặt, nhưng người không chuyên có thể thấy khó tiếp cận. Cách này bỏ qua bố cục trực quan mà khối cung cấp.
Cách thứ tư là bộ công cụ văn phòng cộng tác trên nền điện toán đám mây. Chúng mạnh về đồng soạn thảo, trong khi Gutenberg theo README mới xếp cộng tác thời gian thực vào giai đoạn phát triển tiếp theo. Bài viết không so sánh hiệu năng hay giá của các phương án vì không có số liệu đã xác minh. [1]
Hạn chế và những tình huống không nên chọn
Hạn chế đầu tiên nằm ở kiểu dáng. Tài liệu styles ghi nhận rằng block supports chỉ cho mỗi loại kiểu một thể hiện trên mỗi khối và kiểu được tuần tự hóa vào nút bao ngoài; Global Styles cũng có giới hạn về bộ chọn CSS riêng và về danh sách khối hiển thị trong giao diện.
Hạn chế thứ hai là khóa nội dung. Chế độ contentOnly phải được quản lý bằng mã, nút Modify cho phép người dùng bật công cụ thiết kế rộng hơn và tài liệu nói hiện chưa thể gỡ tùy chọn này bằng chương trình. Do đó nó không phù hợp khi bạn cần ngăn tuyệt đối việc thay đổi bố cục. [11]
Không nên dùng khi: cần dữ liệu có cấu trúc chặt như biểu mẫu nghiệp vụ hoặc quy trình phê duyệt; cần kiểm toán thay đổi ở mức pháp lý; hoặc không có người chịu trách nhiệm cập nhật WordPress. Cũng không nên dựa vào tính năng thuộc lộ trình, như cộng tác thời gian thực, cho đến khi có tài liệu phát hành xác nhận. [1]
Kế hoạch thử nghiệm sáu tuần cho cổng thông báo nội bộ
Pilot đề xuất kéo dài sáu tuần trên môi trường tách biệt, chỉ chứa thông báo mẫu, không có dữ liệu khách hàng hay dữ liệu giao dịch. Mục tiêu là kiểm tra bốn giả thuyết: mẫu khối giữ được cấu trúc, người soạn làm được việc mà không cần lập trình viên, nâng cấp không phá nội dung cũ, và quyền khóa khối hoạt động như thiết kế.
Giai đoạn một, tuần một và hai: dựng môi trường, đăng ký hai khối riêng bằng block.json với namespace riêng, tạo ba mẫu thông báo và áp dụng khóa. Tiêu chí hoàn thành là tất cả mẫu mở được và lưu lại thành post_content hợp lệ. Giai đoạn hai, tuần ba và bốn: mười người soạn thử tạo thông báo; ghi nhận lỗi bố cục và số lần cần hỗ trợ. Giai đoạn ba, tuần năm: nâng cấp một phiên bản WordPress trên môi trường thử, chạy lại bộ bài mẫu và kiểm tra khối còn hợp lệ. Giai đoạn bốn, tuần sáu: rà soát quyền và tổng kết. [8][11]
Tiêu chí đo được: tỷ lệ thông báo đạt đủ trường bắt buộc, số bài bị đánh dấu khối không hợp lệ sau nâng cấp bằng không, và người soạn hoàn tất bài mẫu mà không cần can thiệp mã. Ngưỡng cụ thể do đơn vị đặt trước khi bắt đầu; bài viết không đưa ra con số. Nên có thêm một thử nghiệm đối kháng, trong đó người dùng không phải quản trị cố gắng mở khóa khối để xác nhận kết quả khớp với cấu hình. [11]
Tiêu chí dừng: nếu sau hai vòng chỉnh mẫu vẫn còn khối không hợp lệ sau nâng cấp, hoặc nhu cầu phê duyệt và kiểm toán vượt khả năng của WordPress mà không cần hệ thống ngoài, nên dừng và đánh giá phương án wiki có phiên bản hoặc hệ thống quản lý quy trình riêng. [5]
Kết luận: dùng Gutenberg như bộ khung kiểm soát biên tập, không như hệ thống tuân thủ
Gutenberg đáng chú ý ở chỗ nó biến nội dung thành cây khối có thể kiểm soát, lưu bằng HTML có chú thích và dựng từ các gói module có thể dùng lại. Các tài liệu kiến trúc, định dạng dữ liệu và khóa khối cho thấy một thiết kế nhất quán cho việc soạn thảo có cấu trúc trong WordPress. [3][6][10]
Với tình huống cổng thông báo nội bộ giả định, giá trị tiềm năng nằm ở mẫu khối, khóa khối và khối riêng, không phải ở việc thay thế quy trình tuân thủ. Quyết định nên dựa vào kết quả pilot: khả năng giữ cấu trúc, độ ổn định khi nâng cấp và mức công sức vận hành thực tế. [11]
Nguồn và phương pháp: tài liệu tại commit cố định, chưa chạy phần mềm
Dự án được chọn từ kho lưu trữ GitHub Trending do bonfy duy trì, ghi nhận 7 lần xuất hiện từ 10/01/2026 đến 30/07/2026, với bằng chứng ngày 10/01/2026 là trang lưu trữ được liên kết trong danh sách nguồn. Kho lưu chỉ theo dõi danh sách Python, Go, JavaScript và Swift, thiếu ngày 03/09 và 12/10, nên đây không phải bảng xếp hạng Top 100 chính thức của GitHub và không suy rộng ra toàn bộ GitHub Trending. [12]
Mã nguồn được cố định ở commit 47d76d8364ee44bdb7a255f723032f20af2d4146, ngày commit 12/10/2026, kiểm tra ngày 12/10/2026. Các tệp đã đọc gồm README, LICENSE.md, README kiến trúc, tài liệu styles, entities, data-flow, và thêm năm tài liệu bổ sung: key-concepts, block-metadata, block-registration, modularity và block-locking.
Đây là nghiên cứu tài liệu: tác giả không cài đặt, chạy, đo hiệu năng hay triển khai phần mềm, và tình huống Việt Nam là giả định.
Bài viết không phải công bố khoa học đã qua phản biện. Nội dung kho mã được xem là dữ liệu tham khảo, không phải chỉ dẫn; những mệnh đề về lộ trình, giấy phép và khả năng chỉ có giá trị tại commit nói trên. [7][8][9][10][11]
Xem mã nguồn Gutenberg trên GitHub