Tháng 9 này tương đối yên bình với người dùng WordPress, nhưng với anh em dev thì có khá nhiều thứ đáng ngó qua. WordPress 7.1 vừa ra mắt hồi giữa tháng 8, và sau đó đội ngũ Gutenberg đã đẩy liên tiếp hai bản phát hành: 23.8 và 23.9. Mình đã đọc kỹ bản tổng hợp chính thức trên WordPress Developer Blog của Justin Tadlock (10/09/2026) và bài này chính là bản tóm tắt kèm hướng dẫn thực tế những gì anh em nên áp dụng ngay.
Điểm đáng chú ý nhất theo mình không phải tính năng hào nhoáng nào, mà là API phím tắt khai báo được cho block, việc DataViews bỏ hết private API, và cảnh báo deprecation của InnerBlocks template mà nếu không xử lý trước WordPress 7.2 thì plugin của bạn sẽ ăn warning. Mình sẽ đi từng mục một, có code copy-paste được luôn.
Gutenberg 23.8 và 23.9 có gì mới cho developer?

Trả lời ngắn gọn: hai bản này chủ yếu là củng cố nền tảng thay vì thêm API lớn, khác với đợt Icon API hoành tráng ở 7.1. Nổi bật nhất là API phím tắt khai báo được cho block variation và transform, DataViews loại bỏ hoàn toàn private API, InnerBlocks template chuyển sang block settings, gói @wordpress/kebab-case tách riêng, cùng loạt sửa schema cho states trong theme.json. Kèm theo đó là khoảng 20 PR cho gói Boot của Site Editor v2. Nghe không sexy, nhưng đây chính là loại thay đổi quyết định plugin của bạn chạy mượt hay vỡ khi WordPress 7.2 ra mắt.
Về lộ trình: WordPress 7.2 dự kiến Beta 1 vào 20-22/10/2026 và bản chính thức vào khoảng 8-10/12/2026. Nghĩa là anh em còn khoảng hai tháng để dọn dẹp code trước chu kỳ phát triển mới.
Cách khai báo phím tắt tùy chỉnh cho block variation như thế nào?
Đây là tính năng mình thích nhất trong đợt này. Trước giờ Alt+Shift+2 để đổi đoạn văn thành Heading 2 đã có từ 2022, nhưng nó được hardcode trong một private component. Từ Gutenberg 23.9, anh em có thể tự khai báo phím tắt cho variation và transform của riêng mình một cách công khai.
Với block variation, anh em thêm object shortcut (số ít) như sau:
wp.blocks.registerBlockVariation( 'core/heading', {
name: 'h2',
title: 'Heading 2',
attributes: { level: 2 },
isActive: ( blockAttributes ) => blockAttributes.level === 2,
shortcut: {
name: 'core/block-editor/transform-to-heading-2',
description: __( 'Transform the selected block into a heading 2.' ),
keyCombination: { modifier: 'access', character: '2' },
},
} );Lưu ý nhỏ mà nhiều người sẽ dính: với transform thì tên property là shortcuts (số nhiều) dạng array, kèm variationName tùy chọn. Cách đặt tên khác nhau giữa hai chỗ này hơi khó chịu, nhưng nó cho phép một transform mang sáu phím tắt mà không lặp sáu lần trong block switcher. Mình đã thử với một block CTA tự viết, hoạt động ngon lành trên Gutenberg 23.9.
Vì sao plugin dùng DataViews hay gặp lỗi “Cannot unlock an object that was not locked before”?
Đây là cái lỗi kinh điển mà chắc ai bundle @wordpress/dataviews vào plugin đều gặp tối thiểu một lần. Nguyên nhân là DataViews ship dạng bundle nhưng lại gọi private API, mà hai bản sao của @wordpress/private-apis trong cùng một runtime không unlock được object của nhau. Trớ trêu nhưng đúng là vậy.
Tin vui: issue này đã được xử lý trọn vẹn bằng cách loại bỏ hẳn @wordpress/private-apis khỏi package. Hiệu ứng phụ đáng giá hơn cả bản fix: các component mà DataViews phụ thuộc trước đây giấu sau tường private nay có nhà công khai. Cụ thể Calendar và RangeCalendar chuyển sang @wordpress/ui, withIgnoreIMEEvents chuyển sang @wordpress/keycodes, và ValidatedInputControl giờ là public. Nếu bạn từng “nhòm trộm” một component của Core mà không import được thì giờ vài cái đã import thẳng được rồi.
InnerBlocks template thay đổi thế nào và tại sao phải sửa trước WordPress 7.2?
Đây là mục anh em cần hành động sớm nhất. Gutenberg 23.8 chuyển template và templateInsertUpdatesSelection từ prop của <InnerBlocks> sang block type settings trong registerBlockType:
registerBlockType( 'core/list', {
template: [ [ 'core/list-item' ] ],
templateInsertUpdatesSelection: true,
// ...
} );Lý do kỹ thuật khá hay: lộ trình real-time collaboration. Kiểu cũ áp template sau khi mount, trên từng client kết nối — nghĩa là nếu ba người cùng edit và một người chèn block List, tài liệu nhận được ba list item. Chuyển khai báo lên block settings thì block và template land trong đúng một store operation, ai cũng thấy kết quả giống nhau.
Khoảng hai mươi block của Core đã migrate xong. Prop cũ vẫn chạy nhưng đã deprecation. Lời khuyên của mình: nếu block của bạn có inner block template, sửa ngay trong tháng này, đừng đợi 7.2 release rồi mới cuống. Quá trình sửa chỉ mất vài phút mỗi block.
Gói @wordpress/kebab-case dùng khi nào?
Chi tiết nhỏ nhưng dễ gây bug ngầm. Hàm _wp_to_kebab_case() của Core có ngữ nghĩa khác các thư viện kebab-case bên ngoài, đặc biệt với số. Giờ nó được tách thành package JS riêng @wordpress/kebab-case để đảm bảo JS và PHP ra đúng cùng kết quả:
kebabCase( 'white2white' ); // 'white-2-white'
kebabCase( 'font2xl' ); // 'font-2-xl'
kebabCase( 'white4th' ); // 'white-4th'Nếu plugin bạn tự viết hàm chuyển slug theo phong cách WordPress, thay bằng package này để hết lệch giữa frontend và backend.
Theme.json có thay đổi gì cho người làm theme?
Có mấy điểm đáng money. Thứ nhất, schema cho states được sửa lại cho đúng — cái mà ai từng validate theme.json với responsive states ở 7.1 sẽ hiểu nỗi khổ. Thứ hai, thẻ label giờ style được qua Global Styles, cùng cite, textInput và select mở rộng khả năng tùy biến. Thứ ba, block Group có blockGap riêng cho chiều dọc và ngang, nhận cả string lẫn object. Kèm theo là các tùy chọn tuyển chọn UI styles kỹ hơn cho theme author.
Một ghi chú thêm: các editor giờ dùng đúng admin color scheme thay vì màu cứng, nên giao diện nhất quán hơn với wp-admin — chi tiết nhỏ nhưng khách hàng doanh nghiệp rất thích.
Cách thử các tính năng mới ngay không cần cài đặt gì?
Nhanh nhất là mở một Playground instance với WordPress beta trên playground.wordpress.net, không cần setup gì cả. Cách chuẩn hơn thì chạy WordPress trunk kèm bản Gutenberg mới nhất trên môi trường dev. Riêng với Runnable Code Examples, anh em chỉ cần mở Code Reference, ví dụ trang WP_HTML_Processor::class_list(), bấm nút Run là snippet chạy trực tiếp trong browser trên một WordPress thật. Ví dụ viết ngay trong DocBox bằng code fence php interactive, chạy bằng Playground phía sau. Đây là mốc khá lớn cho văn hóa documentation của WordPress.
Mình đánh giá thế nào về hai bản phát hành này?
Nói thẳng: 23.8 và 23.9 không phải bản “pháo hoa”, nhưng mình đánh giá cao kiểu làm nền trước bão này. Phím tắt khai báo được, component công khai hóa, template chuyển sang settings — tất cả đều đang dọn đường cho real-time collaboration và Site Editor v2. Contributing guideline giờ còn yêu cầu tính năng Site Editor mới phải land vào bản extensible. Ai làm product quanh Site Editor nên theo dõi issue iteration này sát sao.
Kế hoạch hành động của mình cho anh em: một, kiểm tra plugin có dùng InnerBlocks template thì migrate ngay; hai, nâng cấp dep nếu đang bundle DataViews; ba, thử API shortcut mới cho block hay dùng; bốn, đăng ký lịch 20/10 để test WordPress 7.2 Beta 1. Làm xong bốn mục này thì tới tháng 12 anh em sẽ ngủ ngon hơn khá nhiều. trong bài tổng hợp Field Guide WordPress 7.1 mình đã nêu trước đó. Nếu bạn chưa kịp nâng cấp lên WordPress 7.1 thì đọc lại bài smoke test sau nâng cấp của mình trước đã, rồi mới tính tiếp.
