Bỏ qua tới nội dung
WordPress· ·10 phút đọc

Child theme WordPress, tuỳ biến an toàn khi theme cha cập nhật

Vũ Đức Minh
Child theme WordPress, tuỳ biến an toàn khi theme cha cập nhật
Cỡ chữ

Bạn mua một theme đẹp, sửa vài dòng CSS, thêm một đoạn chức năng vào file của theme — rồi một ngày theme cập nhật phiên bản mới và mọi chỉnh sửa biến mất sạch. Đây là tình huống kinh điển mà child theme sinh ra để giải quyết. Bài này giải thích cơ chế, cách dựng đúng chuẩn 2026 (cho cả theme cổ điển lẫn block theme), và quan trọng nhất: khi nào thực sự nên dùng child theme.

Vì sao sửa thẳng theme cha là sai lầm

Mỗi theme WordPress đặt trong một thư mục riêng dưới wp-content/themes/. Khi bạn cập nhật theme, WordPress xoá toàn bộ thư mục cũ và thay bằng thư mục mới tải về. Mọi dòng code bạn nhét vào style.css hay functions.php của theme cha đều nằm trong thư mục đó — nên chúng bị ghi đè không thương tiếc.

Cập nhật theme không phải chuyện tuỳ chọn. Đó là cách bạn vá lỗi bảo mật và tương thích với phiên bản WordPress mới. Vì vậy lời khuyên “đừng cập nhật để khỏi mất tuỳ biến” là một cái bẫy nguy hiểm — bạn đánh đổi an toàn lấy sự tiện lợi tạm thời.

Child theme phá thế lưỡng nan đó: bạn để theme cha tự do cập nhật, còn tuỳ biến của mình nằm trong một thư mục tách biệt mà bản cập nhật không bao giờ đụng tới.

So sánh sửa thẳng theme cha và dùng child theme khi tuỳ biến
Cùng một thay đổi giao diện, hai cách làm cho kết quả rất khác khi theme cập nhật.

Child theme hoạt động như thế nào

Child theme là một theme riêng, có thư mục riêng, nhưng khai báo “cha” của nó là theme nào. WordPress khi tải một template (mẫu trang) sẽ tìm trong child theme trước; nếu không thấy mới quay về tìm ở theme cha. Cơ chế ưu tiên này gọi là template hierarchy (thứ bậc template).

Nói cách khác, child theme thừa kế mọi thứ của cha theo mặc định, và bạn chỉ ghi đè đúng phần mình muốn đổi. Muốn sửa phần đầu trang? Chép file header.php (theme cổ điển) hoặc mẫu parts/header.html (block theme) sang child theme rồi sửa — bản cha vẫn nguyên vẹn.

Tạo child theme cho theme cổ điển (classic theme)

Một child theme tối thiểu chỉ cần một thư mục và một file. Giả sử bạn muốn làm con của theme tên thư mục là twentytwentyfour:

Bước 1 — Tạo thư mục và file style.css

Tạo wp-content/themes/twentytwentyfour-child/, bên trong là file style.css với phần header (đầu file) như sau:

/*
 Theme Name:   Twenty Twenty-Four Child
 Template:     twentytwentyfour
 Version:      1.0.0
 Text Domain:  twentytwentyfour-child
*/

Hai dòng bắt buộc là Theme Name (tên hiển thị) và Template. Theo Theme Handbook của WordPress, giá trị Template phải trùng khít 100% tên thư mục của theme cha — sai một ký tự là WordPress không nhận ra quan hệ cha–con.

Bước 2 — Nạp stylesheet của theme cha qua functions.php

Nhiều người vẫn dùng cách cũ là @import trong CSS để kéo style của cha — cách này chậm và đã lỗi thời từ lâu. Chuẩn hiện nay là dùng functions.php để enqueue (xếp hàng nạp) đúng cách. Tạo file functions.php trong thư mục child theme:

<?php
add_action( 'wp_enqueue_scripts', 'twentytwentyfour_child_enqueue_styles' );

function twentytwentyfour_child_enqueue_styles() {
    // Nạp stylesheet của theme cha
    wp_enqueue_style(
        'twentytwentyfour-parent-style',
        get_parent_theme_file_uri( 'style.css' )
    );
}

Giải thích từng phần:

  • add_action( 'wp_enqueue_scripts', ... ) — gắn hàm của bạn vào đúng thời điểm WordPress nạp CSS/JS phần giao diện ngoài (front-end).
  • wp_enqueue_style() — hàm chuẩn để đăng ký một file CSS, tránh nạp trùng và quản lý thứ tự đúng cách.
  • get_parent_theme_file_uri( 'style.css' ) — trỏ thẳng tới style.css của theme cha (chứ không phải child), bất kể tên thư mục cha là gì. Đây là hàm Handbook khuyến nghị thay cho get_template_directory_uri() nối chuỗi thủ công.

Tham số đầu ('twentytwentyfour-parent-style') là handle (mã định danh) duy nhất cho file này. Nếu sau đó child theme có style riêng phụ thuộc style cha, bạn khai báo nó với mảng dependency trỏ về handle trên để bảo đảm style cha nạp trước.

Bước 3 — Kích hoạt

Vào Giao diện → Theme, child theme đã xuất hiện. Kích hoạt là xong. Trang web trông y hệt vì child chưa ghi đè gì — đó là dấu hiệu bạn làm đúng.

Child theme cho block theme (FSE) năm 2026

Từ khi Full Site Editing (chỉnh sửa toàn site bằng block) trở thành mặc định, cách làm có khác biệt quan trọng. Với block theme, phần lớn giao diện được điều khiển bởi file theme.json — nơi khai báo màu, phông chữ, khoảng cách, bố cục dưới dạng design token (mã thiết kế). Bạn thường không cần functions.php chỉ để nạp CSS nữa.

Để làm con của một block theme, bạn vẫn tạo thư mục và style.css với header như trên, nhưng thêm một file theme.json để ghi đè đúng những token muốn đổi. Ví dụ đổi màu nền chính:

{
    "$schema": "https://schemas.wp.org/trunk/theme.json",
    "version": 3,
    "settings": {
        "color": {
            "palette": [
                { "slug": "base", "color": "#fafaf8", "name": "Nền chính" }
            ]
        }
    }
}

WordPress trộn (merge) theme.json theo thứ bậc: mặc định lõi → cha → con → tuỳ biến của người dùng trong Global Styles. Con chỉ cần khai báo phần khác biệt, mọi token còn lại tự thừa kế từ cha. Lưu ý dùng "version": 3 nếu site chạy WordPress 6.6 trở lên (đến 2026 hầu hết đều vậy) để tận dụng đầy đủ tính năng theme.json mới nhất.

Cần xử lý nâng cao hơn về cấu trúc và token, bạn có thể tham khảo cách tuỳ biến theme WordPress theo nhu cầu riêng để biết khi nào nên dừng ở child theme và khi nào cần đi xa hơn.

So sánh tạo child theme cho classic theme và cho block theme FSE
Cùng là child theme nhưng cách dựng khác nhau giữa classic và block theme.

Khi nào dùng child theme, khi nào cần custom theme

Child theme không phải lời giải cho mọi tình huống. Hãy chọn theo mức độ thay đổi:

Tình huốngNên dùng
Sửa màu, phông, vài chỗ layout của một theme có sẵnChild theme
Ghi đè 1–2 template, thêm vài hàm nhỏChild theme
Phải chép đè gần hết template, sửa quá nửa giao diệnCân nhắc custom theme
Thiết kế hoàn toàn riêng, không phụ thuộc theme nàoCustom theme (theme tự code)

Nguyên tắc của Web22 qua kinh nghiệm tự code theme: nếu bạn thấy mình đang chép đè quá nhiều file từ cha sang con, child theme đã hết tác dụng — bạn đang gánh trọng lượng của theme cha mà gần như không dùng tới nó. Lúc đó dựng một theme WordPress làm riêng từ đầu sẽ gọn, nhẹ và dễ bảo trì hơn nhiều, vì không còn ràng buộc vào cập nhật của bên thứ ba.

Ngược lại, khi bạn chỉ muốn “đứng trên vai” một theme tốt và thêm dấu ấn riêng, child theme là lựa chọn an toàn và nhanh nhất.

Còn nếu bạn không tự dựng mà muốn thuê làm, dịch vụ thiết kế website chuyên nghiệp của Web22 nhận làm từ giao diện riêng tới child theme tuỳ tình huống của bạn.

Vài câu hỏi thường gặp

Child theme có làm web chậm hơn không?

Gần như không. WordPress xử lý quan hệ cha–con ở mức rất nhẹ. Cách cũ @import mới gây chậm, còn enqueue đúng chuẩn thì không đáng kể.

Có thể tạo child theme cho child theme không?

Không. WordPress không hỗ trợ “cháu theme” — quan hệ thừa kế chỉ một tầng cha–con.

Xoá child theme có mất nội dung không?

Không mất bài viết hay trang (chúng nằm trong database), nhưng mất các tuỳ biến giao diện đã đặt trong child theme. Hãy sao lưu thư mục child theme trước khi xoá.

Cần làm web?

Dịch vụ liên quan
tới chủ đề bài này.

Tất cả dịch vụ
Đọc tiếp

Bài viết
cùng chủ đề.

Tất cả bài viết