Blog

Child theme WordPress là gì? Hướng dẫn tạo và sử dụng

Tháng 5 29, 2026 · wn_admin

Child theme Wordpress là gì?

Bạn đã từng tỉ mỉ chỉnh màu sắc, sửa font chữ, thêm vài đoạn CSS cho website WordPress của mình thật ưng ý — rồi sau một lần bấm nút cập nhật theme, tất cả biến mất sạch như chưa từng tồn tại? Đó chính xác là vấn đề mà child theme WordPress sinh ra để giải quyết. Trong bài viết này, chúng ta sẽ tìm hiểu child theme là gì, vì sao nó là “tấm khiên” bảo vệ mọi tùy chỉnh của bạn, khi nào thực sự cần dùng và khi nào không, cùng hướng dẫn tạo một child theme từ đầu bằng tay với code thật, kèm cả cách ghi đè template, override function và xử lý các lỗi hay gặp. Hiểu rõ child theme một lần là bạn tùy biến website thoải mái mà không bao giờ sợ mất công.

1. Child theme WordPress là gì? Quan hệ với parent theme

Một child theme WordPress (giao diện con) là một theme kế thừa toàn bộ chức năng, bố cục và phong cách của một theme khác — gọi là parent theme (giao diện cha). Thay vì chỉnh sửa trực tiếp vào theme gốc, bạn tạo một theme con đứng riêng và chỉ ghi vào đó những gì bạn muốn thay đổi. Mọi thứ bạn không động tới sẽ được “mượn” tự động từ parent theme.

Hãy hình dung child theme như một lớp giấy can (giấy bóng mờ) đặt chồng lên bản thiết kế gốc. Bản gốc — parent theme — vẫn nguyên vẹn bên dưới. Bạn vẽ thêm, xóa bớt, tô lại trên lớp giấy can, và người xem thấy kết quả là sự kết hợp của hai lớp. Khi cần, bạn chỉ việc bỏ lớp giấy can ra là quay về bản gốc, không mất một nét nào.

Cơ chế kế thừa hoạt động ra sao

WordPress xử lý child theme theo một quy tắc rõ ràng: với mỗi file template (ví dụ header.php, single.php, footer.php), nó ưu tiên tìm trong thư mục child theme trước. Nếu tìm thấy, nó dùng file của child theme. Nếu không thấy, nó tự động dùng file cùng tên trong parent theme. Nhờ vậy bạn chỉ cần sao chép và sửa đúng những file mình quan tâm, phần còn lại để parent theme lo.

Riêng hai file functions.php hoạt động khác một chút: WordPress nạp cả hai, file của child theme được nạp trước file của parent theme. Còn với CSS, file style.css của child theme được nạp sau nên có quyền “đè” lên các quy tắc CSS của parent (do thứ tự xếp chồng trong CSS). Hiểu hai điểm khác biệt này là bạn đã nắm 80% bản chất của child theme.

Một parent theme có thể có nhiều child theme, nhưng một child theme chỉ thuộc về một parent theme duy nhất, được khai báo trong dòng Template: của file style.css. Child theme không thể tự chạy nếu parent theme bị xóa khỏi website.

2. Tại sao cần dùng child theme?

Lý do quan trọng nhất, và cũng là lý do child theme ra đời, nằm gọn trong một câu: giữ nguyên tùy chỉnh khi cập nhật parent theme. Theme gốc sẽ được tác giả cập nhật định kỳ để vá lỗi bảo mật, tương thích với phiên bản WordPress mới và thêm tính năng. Mỗi lần cập nhật, toàn bộ file của parent theme bị ghi đè bằng phiên bản mới.

Nếu bạn đã sửa trực tiếp vào file của parent theme, ví dụ thêm code vào functions.php hay đổi CSS trong style.css của theme gốc, thì lần cập nhật tiếp theo sẽ xóa sạch những thay đổi đó. Bạn buộc phải chọn: hoặc không bao giờ cập nhật (rủi ro bảo mật cao), hoặc cập nhật rồi làm lại tùy chỉnh từ đầu (mất thời gian, dễ sai sót). Child theme phá vỡ thế bí này.

Bốn lợi ích cụ thể của child theme

  • Cập nhật an toàn: parent theme được nâng cấp thoải mái mà code và CSS của bạn nằm trong child theme vẫn còn nguyên.
  • Dễ rollback: nếu một tùy chỉnh gây lỗi, bạn chỉ cần kích hoạt lại parent theme hoặc xóa file vừa sửa trong child theme — website quay về trạng thái gốc ngay.
  • Tách bạch rõ ràng: mọi thay đổi của bạn gom vào một chỗ, dễ kiểm soát, dễ chuyển sang website khác, dễ bàn giao cho người khác.
  • Học hỏi nhanh: bạn thử nghiệm sửa template mà không sợ phá hỏng theme gốc, vì bản gốc luôn an toàn bên dưới.

Trên một website bán hàng, child theme còn quan trọng gấp đôi. Bạn không thể để cửa hàng “đứng hình” hay vỡ giao diện chỉ vì một lần cập nhật. Với child theme, bạn vừa được cập nhật bảo mật vừa giữ nguyên những tinh chỉnh giúp tăng tỉ lệ chuyển đổi như nút “Mua ngay” tùy biến, layout trang sản phẩm riêng hay phần chân trang đặc thù. Nếu bạn cũng đang lo về quy trình nâng cấp, bài hướng dẫn cập nhật WordPress thủ công an toàn sẽ bổ sung góc nhìn rất hữu ích.

Quy tắc vàng: không bao giờ chỉnh sửa trực tiếp file của parent theme. Mọi tùy chỉnh dù nhỏ nhất cũng nên đặt trong child theme. Thói quen này tiết kiệm cho bạn hàng giờ làm lại mỗi lần cập nhật.

3. Khi nào KHÔNG cần child theme?

Child theme rất hữu ích, nhưng không phải lúc nào cũng bắt buộc. Có những tình huống tạo child theme là thừa thãi, thậm chí làm phức tạp hóa vấn đề không cần thiết.

Những trường hợp có thể bỏ qua child theme

  • Bạn không sửa code: nếu chỉ dùng tùy chọn trong Customizer hoặc trình kéo thả của theme (như Elementor, theme options), các thiết lập này lưu trong database chứ không nằm trong file theme, nên cập nhật không làm mất chúng.
  • Chỉ thêm vài dòng CSS nhỏ: WordPress có sẵn ô “CSS bổ sung” trong Giao diện → Tùy biến → CSS bổ sung. CSS ở đây cũng lưu trong database và không bị mất khi cập nhật theme.
  • Theme bạn dùng tự nó là sản phẩm cuối, không có bản cập nhật: nếu tác giả không còn phát hành cập nhật, rủi ro mất tùy chỉnh do cập nhật gần như bằng không (dù vẫn nên cân nhắc đổi theme khác để đảm bảo bảo mật).
  • Tùy chỉnh thuộc về chức năng, không về giao diện: code thêm chức năng (như thêm shortcode, sửa hành vi) nên đặt trong một plugin nhỏ tự viết hơn là child theme, để chức năng vẫn chạy kể cả khi bạn đổi theme.

Nguyên tắc đơn giản: nếu bạn cần sửa file PHP của theme hoặc viết CSS dài, hãy dùng child theme. Nếu chỉ chỉnh qua giao diện cài đặt và CSS bổ sung của Customizer, thường không cần.

4. Cách tạo child theme thủ công từ A đến Z

Tạo child theme bằng tay đơn giản hơn bạn nghĩ — chỉ cần một thư mục và hai file. Giả sử parent theme của bạn nằm trong thư mục wp-content/themes/storefront (tên thư mục là storefront). Chúng ta sẽ tạo child theme cho nó.

1

Tạo thư mục cho child theme

Trong wp-content/themes/, tạo một thư mục mới. Quy ước phổ biến là lấy tên parent theme và thêm hậu tố -child, ví dụ storefront-child. Tên thư mục không nên có dấu cách hay ký tự đặc biệt, chỉ dùng chữ thường và dấu gạch ngang.

2

Tạo file style.css với header bắt buộc

Trong thư mục vừa tạo, thêm file style.css. Phần đầu file phải có một khối comment đặc biệt để WordPress nhận diện đây là một theme. Dòng Template: là quan trọng nhất — nó phải khớp chính xác với tên thư mục của parent theme.

3

Tạo file functions.php để nạp CSS

Thêm file functions.php để dùng hook wp_enqueue_scripts nạp style của parent theme rồi đến style của child theme đúng thứ tự.

4

Kích hoạt child theme

Vào Giao diện → Giao diện trong bảng điều khiển WordPress, tìm child theme vừa tạo và bấm “Kích hoạt”. Website giờ đang chạy bằng child theme.

File style.css mẫu

Đây là nội dung tối thiểu cho file style.css của child theme. Mỗi dòng đều có ý nghĩa, nhưng chỉ Theme Name và Template là bắt buộc:

/*
 Theme Name:   Storefront Child
 Theme URI:    https://webngon.net/
 Description:  Child theme cho giao dien Storefront
 Author:       Webngon
 Author URI:   https://webngon.net/
 Template:     storefront
 Version:      1.0.0
 Text Domain:  storefront-child
*/

/* Cac quy tac CSS tuy chinh cua ban viet o duoi day */

Giá trị của Template: phải là tên thư mục của parent theme, KHÔNG phải tên hiển thị (Theme Name) của nó. Phân biệt chữ hoa chữ thường: nếu thư mục là Storefront mà bạn viết storefront thì WordPress sẽ báo lỗi không tìm thấy parent theme.

File functions.php mẫu để nạp style

Nhiều người mới chỉ tạo style.css rồi thắc mắc vì sao website mất hết định dạng. Lý do: child theme không tự động nạp CSS của parent theme. Bạn phải nạp nó bằng functions.php. Cách đúng hiện nay là dùng wp_enqueue_scripts:

<?php
/**
 * Nap style cua parent theme va child theme
 */
add_action( 'wp_enqueue_scripts', 'webngon_child_enqueue_styles' );

function webngon_child_enqueue_styles() {

    // 1. Nap style.css cua parent theme
    wp_enqueue_style(
        'parent-style',
        get_template_directory_uri() . '/style.css'
    );

    // 2. Nap style.css cua child theme (phu thuoc parent de nap sau)
    wp_enqueue_style(
        'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array( 'parent-style' ),
        wp_get_theme()->get( 'Version' )
    );
}

Hai hàm cần nhớ và rất dễ nhầm: get_template_directory_uri() luôn trỏ tới thư mục parent theme, còn get_stylesheet_directory_uri() trỏ tới thư mục child theme đang chạy. Tham số array( 'parent-style' ) ở style con khai báo rằng nó phụ thuộc style cha, nhờ đó WordPress luôn nạp style cha trước, style con sau — đúng thứ tự để CSS của bạn ghi đè được.

Bạn có thể tạo thêm file screenshot.png (kích thước khuyến nghị 1200x900px) trong thư mục child theme để có ảnh đại diện đẹp trong trang quản lý giao diện. Đây không bắt buộc nhưng giúp bạn dễ nhận ra theme của mình.

5. Ghi đè template, function và CSS trong child theme

Sau khi child theme đã chạy, đây là phần thú vị nhất: tùy biến mà không sợ mất. Có ba kiểu tùy chỉnh chính, mỗi kiểu có cách làm riêng.

Ghi đè file template (copy file từ parent sang child)

Muốn sửa cấu trúc một trang, ví dụ trang chi tiết bài viết single.php hay chân trang footer.php, bạn không sửa file trong parent theme. Thay vào đó:

1

Sao chép file từ parent sang child

Copy file footer.php từ themes/storefront/ sang themes/storefront-child/, giữ nguyên tên và đường dẫn tương đối. Nếu file nằm trong thư mục con, ví dụ template-parts/content.php, bạn phải tạo cùng cấu trúc thư mục trong child theme.

2

Sửa bản copy trong child theme

Mở file vừa copy trong thư mục child và chỉnh sửa theo ý muốn. WordPress sẽ ưu tiên dùng file này thay cho file gốc cùng tên.

Quy tắc “đường dẫn tương đối phải khớp” rất quan trọng. Nếu parent đặt file ở woocommerce/single-product.php, bạn cũng phải đặt ở woocommerce/single-product.php trong child thì WordPress mới nhận. Đặt sai cấp thư mục là một trong những lỗi khiến template không được ghi đè.

Override function (ghi đè hàm)

Với functions.php, cơ chế khác hẳn template: file của child không thay thế file của parent, mà cả hai cùng chạy. Vì vậy bạn không copy toàn bộ functions.php của parent sang child. Bạn chỉ thêm code mới vào functions.php của child.

Để ghi đè một hàm có sẵn của parent, tác giả parent theme thường bọc hàm trong kiểm tra function_exists(). Khi đó bạn định nghĩa lại hàm cùng tên trong child theme (nạp trước) là phiên bản của bạn sẽ được dùng:

<?php
// Trong parent theme, ham thuong duoc bao nhu sau:
if ( ! function_exists( 'storefront_credit' ) ) {
    function storefront_credit() {
        echo 'Copyright Parent Theme';
    }
}

// Trong functions.php cua CHILD theme, ban dinh nghia lai:
function storefront_credit() {
    echo 'Copyright ' . date( 'Y' ) . ' - Cua hang cua ban';
}

Nếu hàm của parent không bọc function_exists(), bạn không thể định nghĩa trùng tên (sẽ gây lỗi “Cannot redeclare function”). Khi đó cách an toàn là dùng remove_action() để gỡ hành động cũ rồi add_action() hành động mới của bạn:

<?php
add_action( 'after_setup_theme', 'webngon_thay_the_footer' );

function webngon_thay_the_footer() {
    // Go bo ham cu cua parent (neu no gan qua hook)
    remove_action( 'storefront_footer', 'storefront_credit', 20 );
    // Gan ham moi cua ban vao cung hook
    add_action( 'storefront_footer', 'webngon_credit_moi', 20 );
}

function webngon_credit_moi() {
    echo '<p>Thiet ke boi cua hang cua ban</p>';
}

Ghi đè CSS

Đây là kiểu tùy chỉnh đơn giản và phổ biến nhất. Bạn chỉ cần viết quy tắc CSS mới vào file style.css của child theme. Vì style con được nạp sau style cha (nhờ khai báo phụ thuộc ở phần trước), nên quy tắc của bạn sẽ thắng khi có cùng độ ưu tiên (specificity).

/* Doi mau nut mua hang trong style.css cua child */
.button.add_to_cart_button {
    background-color: #e63946;
    border-radius: 8px;
    font-weight: 600;
}

/* Tang co chu tieu de bai viet */
.entry-title {
    font-size: 2.2rem;
    line-height: 1.3;
}

Nếu một quy tắc CSS của bạn “không ăn”, thường là do quy tắc của parent có độ ưu tiên cao hơn. Cách xử lý đúng là viết selector cụ thể hơn (specificity cao hơn), tránh lạm dụng !important. Dùng công cụ Inspect (chuột phải → Kiểm tra phần tử) của trình duyệt để xem chính xác quy tắc nào đang thắng.

6. Các lỗi thường gặp và cách khắc phục

Child theme đơn giản nhưng người mới hay vấp vài lỗi giống nhau. Dưới đây là những lỗi phổ biến nhất và cách sửa nhanh.

Website mất hết định dạng, CSS không load

Đây là lỗi số một. Nguyên nhân gần như luôn là chưa nạp style của parent theme trong functions.php, hoặc nạp sai cách. Hãy kiểm tra lại đoạn wp_enqueue_scripts ở phần 4. Đảm bảo có cả hai dòng wp_enqueue_style cho parent và child, và child khai báo phụ thuộc array( 'parent-style' ).

WordPress báo “Theme cha bị thiếu” hoặc “Broken theme”

Lỗi này xuất hiện khi dòng Template: trong style.css sai tên thư mục parent. Vào wp-content/themes/ xem chính xác tên thư mục parent theme (phân biệt hoa thường), rồi copy đúng tên đó vào dòng Template:. Đây là lỗi “Template sai tên folder” rất hay gặp.

Sửa template trong child mà không thấy thay đổi

Kiểm tra hai điều: (1) đường dẫn tương đối của file trong child có khớp với parent không, và (2) có đang dùng cache không. Nhiều plugin cache giữ lại phiên bản cũ; hãy xóa cache (cả cache plugin lẫn cache trình duyệt) sau khi sửa file. Nếu vẫn không thay đổi, có thể file đó được nạp qua hàm khác chứ không theo cơ chế template hierarchy.

Lỗi “Cannot redeclare function” hay màn hình trắng (white screen) sau khi sửa functions.php thường do bạn copy nguyên hàm của parent vào child mà parent không bọc function_exists(). Hãy bật chế độ debug để xem thông báo lỗi chi tiết — tham khảo bài hướng dẫn bật WP_DEBUG để bắt lỗi chính xác.

Quên thẻ mở PHP hoặc thừa khoảng trắng

File functions.php phải bắt đầu bằng <?php và không nên có thẻ đóng ?> ở cuối. Một khoảng trắng hay dòng trống trước <?php cũng có thể gây lỗi “headers already sent”. Hãy kiểm tra ký tự đầu tiên của file thật sạch sẽ.

7. Dùng plugin tạo child theme tự động

Nếu bạn ngại thao tác file thủ công, có những plugin tạo child theme chỉ với vài cú nhấp. Phổ biến nhất là Child Theme Configurator và Generate Child Theme. Cách dùng chung như sau:

1

Cài và kích hoạt plugin

Vào Plugin → Cài mới, tìm “Child Theme Configurator”, cài đặt và kích hoạt như bình thường.

2

Chọn parent theme và phân tích

Mở plugin, chọn parent theme bạn muốn tạo child, bấm “Analyze”. Plugin sẽ kiểm tra theme có tương thích để tạo child theme không.

3

Tạo child theme

Đặt tên, chọn cách nạp style (để mặc định “Use the WordPress style queue”) rồi bấm “Create New Child Theme”. Plugin tự tạo thư mục, style.css và functions.php chuẩn cho bạn.

4

Kích hoạt và kiểm tra

Sang Giao diện, kích hoạt child theme vừa tạo và kiểm tra website hiển thị bình thường.

Sau khi plugin đã tạo xong child theme và mọi thứ chạy ổn, bạn có thể tắt hoặc gỡ plugin — child theme là file thật trên server nên vẫn hoạt động độc lập. Gỡ bớt plugin không cần thiết giúp website nhẹ và an toàn hơn.

Plugin tiện cho người mới, nhưng hiểu cách làm thủ công vẫn quan trọng: khi cần sửa nhỏ hay xử lý lỗi, bạn sẽ không phụ thuộc vào plugin. Nhiều thao tác tùy biến nâng cao vẫn phải vào file trực tiếp.

8. Child theme với giao diện dựng sẵn từ Webngon

Khi bạn mua một giao diện WordPress dựng sẵn — như các sản phẩm tại Webngon.net — child theme đóng vai trò bảo vệ khoản đầu tư của bạn. Theme dựng sẵn thường đẹp và đầy đủ tính năng ngay, nhưng mỗi cửa hàng lại có nhu cầu tinh chỉnh riêng: đổi logo, sửa màu thương hiệu, thêm khối nội dung, tùy biến trang sản phẩm.

Vì sao nên tùy biến qua child theme

Nếu bạn sửa thẳng vào theme dựng sẵn, lần cập nhật tiếp theo (vá lỗi, tương thích WooCommerce mới) sẽ ghi đè công sức của bạn. Với child theme, bạn nhận cập nhật từ chúng tôi mà vẫn giữ trọn vẹn bản sắc riêng. Đây là lý do nhiều giao diện trong kho giao diện Webngon đã kèm sẵn child theme mẫu để bạn bắt đầu ngay.

  • Đặt CSS thương hiệu (màu, font, khoảng cách) vào style.css của child.
  • Ghi đè footer.php để thay thông tin liên hệ, bản quyền của cửa hàng.
  • Thêm code chức năng nhẹ (như đăng ký menu, sidebar) vào functions.php của child.
  • Nhận bản cập nhật parent theme mà không lo mất tùy chỉnh.

Bạn có thể xem thêm các bài viết trong mục hướng dẫn của Webngon để biết cách cài đặt, cấu hình và tối ưu giao diện sau khi mua. Kết hợp giao diện chất lượng với một child theme gọn gàng, website của bạn vừa đẹp, vừa dễ bảo trì lâu dài.

9. Câu hỏi thường gặp

Tạo child theme có làm website chậm đi không?

Gần như không đáng kể. Child theme chỉ thêm một file CSS nhỏ và một lần đọc functions.php. Ảnh hưởng tới tốc độ là cực kỳ ít, hoàn toàn không đáng để đánh đổi với lợi ích bảo vệ tùy chỉnh khi cập nhật. Nếu cấu hình nạp style đúng cách, sự khác biệt về tốc độ là không cảm nhận được.

Tôi có thể tạo child theme cho child theme không?

Không. WordPress chỉ hỗ trợ một cấp kế thừa: parent và child. Bạn không thể tạo “grandchild theme”. Nếu cần nhiều biến thể, hãy tạo nhiều child theme riêng biệt cùng trỏ về một parent theme.

Đang dùng theme rồi mới tạo child theme thì có mất tùy chỉnh cũ không?

Tùy chỉnh lưu trong database (Customizer, widget, menu, CSS bổ sung) sẽ còn nguyên khi bạn chuyển sang child theme, vì child theme cùng “gốc” với parent. Nhưng nếu bạn từng sửa trực tiếp file của parent theme, hãy chép những thay đổi đó sang child theme trước khi kích hoạt, vì chúng sẽ không tự chuyển sang.

Child theme có dùng được với theme block (Full Site Editing) không?

Có, nhưng cơ chế hơi khác. Với theme block, bạn có thể tạo child theme và ghi đè các file template HTML trong thư mục templates/ cũng như theme.json. Phần lớn tùy chỉnh giao diện trong theme block giờ thực hiện qua trình Site Editor và lưu vào database, nên nhu cầu dùng child theme để sửa code ít hơn so với theme cổ điển.

Có thể xóa child theme khi không dùng nữa không?

Được. Trước khi xóa, hãy kích hoạt một theme khác (ví dụ parent theme hoặc một theme mới). Sau đó vào Giao diện, chọn child theme và xóa. Lưu ý: xóa child theme sẽ mất mọi tùy chỉnh code và CSS nằm trong nó, nên hãy sao lưu thư mục child theme trước nếu muốn giữ lại.

Muốn một giao diện đẹp và dễ tùy biến an toàn?

Kho giao diện tại Webngon.net được tối ưu chuẩn WordPress, nhiều mẫu kèm sẵn child theme và hướng dẫn chi tiết, giúp bạn tùy biến thương hiệu thoải mái mà không lo mất công mỗi lần cập nhật.

Xem kho giao diện

Để lại bình luận

Email của bạn sẽ không hiển thị công khai. Các trường bắt buộc được đánh dấu *

Trợ lý AI sẵn sàng! 👋

Bạn cần tư vấn gì không?