Nhập môn phát triển chủ đề WordPress: Xây dựng giao diện website đầu tiên từ con số 0

Đọc trong 3 phút
2026-03-19
2026-06-04
2,277
Tôi kiếm được hoa hồng khi bạn mua sắm thông qua các liên kết dưới đây, mà không phát sinh thêm chi phí nào cho bạn.

Các khái niệm cơ bản về phát triển giao diện WordPress

Trước khi bắt đầu viết mã, việc hiểu rõ cấu trúc cơ bản của một chủ đề WordPress là điều vô cùng quan trọng. Về bản chất, một chủ đề WordPress là tập hợp của nhiều tệp tin khác nhau, và những tệp tin này cùng nhau định nghĩa giao diện và chức năng của trang web. Các tệp tin này bao gồm các tệp mẫu (templates), các tệp biểu định kiểu dáng (style sheets), các tệp chứa hàm (functions – có thể có hoặc không), các tập lệnh (scripts), và nhiều thành phần khác nữa.

The core file is…style.cssindex.phpTrong đó,style.cssKhông chỉ là bảng định dạng (stylesheet) của một giao diện (theme), mà nó còn được coi như “chứng minh thư” của giao diện đó. Phần ghi chú ở đầu tệp tin chứa đựng những thông tin quan trọng như tên giao diện, tác giả, mô tả, phiên bản, v.v. WordPress sử dụng những thông tin này để nhận diện và quản lý các giao diện từ phía backend (hệ thống nền).

Các tệp mẫu (template files) có nhiệm vụ kiểm soát logic hiển thị của các trang khác nhau. Ví dụ,single.phpDùng để hiển thị một bài viết duy nhất.page.phpDùng để hiển thị các trang web độc lập.archive.phpChúng được sử dụng để hiển thị danh sách các bài viết đã được lưu trữ (archive list). Các tệp tin này tuân theo hệ thống cấu trúc mẫu (template hierarchy) của WordPress; khi một mẫu cụ thể không tồn tại, hệ thống sẽ tự động chuyển sang một mẫu phổ quát hơn, và nếu mẫu đó cũng không có sẵn, hệ thống sẽ tiếp tục chuyển sangindex.php

Đọc thêm Hướng dẫn cơ bản về phát triển giao diện WordPress: Tạo ra giao diện trang web riêng của bạn từ con số không

Một tập tin quan trọng khác làfunctions.phpĐây không phải là một tệp tin mẫu, mà là tệp tin chứa các chức năng cốt lõi của chủ đề (theme). Bạn có thể thêm các tính năng tùy chỉnh, đăng ký các mục trong menu và thanh bên cạnh (khu vực công cụ), hỗ trợ hiển thị hình ảnh đại diện (thu nhỏ bài viết) cho chủ đề, cũng như điều chỉnh thứ tự thêm các tệp JavaScript và CSS. Nó tương đương với “bộ não” của chủ đề, có trách nhiệm xử lý logic và mở rộng các chức năng của nó.

UltaHost – Nhà cung cấp dịch vụ máy chủ WordPress chuyên nghiệp
Bảo đảm hoàn tiền trong 30 ngày, băng thông và cơ sở dữ liệu không giới hạn, bảo vệ DDoS miễn phí, mua 3 năm ưu đãi 50%

Việc hiểu rõ các tệp tin cơ bản và chức năng của chúng là bước đầu tiên trong quá trình xây dựng một chủ đề (theme) ổn định và dễ bảo trì.

Xây dựng môi trường phát triển cục bộ và tạo cấu trúc cho các chủ đề (themes)

Trước khi bắt đầu lập trình, việc thiết lập một môi trường phát triển địa phương hiệu quả là điều cực kỳ cần thiết. Chúng tôi khuyến nghị sử dụng các công cụ phát triển địa phương như Local by Flywheel, XAMPP hoặc MAMP – những công cụ này có thể nhanh chóng thiết lập một môi trường chạy WordPress trên máy tính cá nhân, bao gồm Apache, MySQL và PHP. Điều này cho phép bạn phát triển nội dung ngoại tuyến và tự do thực hiện các thử nghiệm, kiểm tra lỗi mà không ảnh hưởng đến trang web trên mạng.

Sau khi môi trường đã sẵn sàng, bạn cần thực hiện các bước tiếp theo trong thư mục cài đặt của WordPress.wp-content/themes/Trong thư mục đó, hãy tạo một thư mục mới để làm danh mục chủ đề của bạn. Tên thư mục nên được viết bằng chữ thường, kết hợp chữ số và dấu gạch ngang, và phải mang tính mô tả rõ ràng. Ví dụ:my-first-theme

Tiếp theo, hãy tạo hai tệp tin cơ bản nhất. Đầu tiên là…style.cssĐầu tệp của nó phải chứa các ghi chú theo định dạng sau:

Đọc thêm WordPress Theme Development là gì

/*
Theme Name: 我的第一个主题
Theme URI: https://example.com/my-first-theme/
Author: 你的名字
Author URI: https://example.com/
Description: 这是一个用于学习的入门级WordPress主题。
Version: 1.0.0
License: GPL v2 or later
Text Domain: my-first-theme
*/

“Text Domain” được sử dụng cho mục đích hóa đa ngôn ngữ (internationalization), và thường trùng khớp với tên thư mục chứa nội dung liên quan đến chủ đề cụ thể. Sau đó là…index.phpĐây là tệp mẫu cơ bản nhất; bạn có thể chỉ cần chứa cấu trúc HTML đơn giản trong tệp này.

<!DOCTYPE html>
<html no numeric noise key 1005>
<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?php wp_head(); ?>
</head>
<body no numeric noise key 1002>
    <header>
        <h1>Chủ đề đầu tiên của tôi</h1>
    </header>
    <main>
        <?php
        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                the_content();
            endwhile;
        endif;
        ?>
    </main>
    <footer>
        <p>© Bản quyền thuộc về</p>
    </footer>
    <?php wp_footer(); ?>
</body>
</html>

Lúc này, hãy đăng nhập vào giao diện quản trị WordPress của bạn, chọn mục “Nhìn” (Appearance) -> “Chủ đề” (Themes). Bạn sẽ thấy chủ đề mới này và có thể kích hoạt nó. Mặc dù chủ đề này còn khá đơn giản, nhưng nó đã đủ để sử dụng được rồi.

Tệp mẫu cốt lõi và giải thích chi tiết về vòng lặp

WordPress sử dụng “The Loop” (Vòng lặp) để lấy nội dung bài viết từ cơ sở dữ liệu và hiển thị chúng trên trang web. The Loop là một khái niệm cốt lõi trong quá trình phát triển các giao diện (theme) cho WordPress; hầu hết các tệp mẫu (template file) đều được xây dựng dựa trên nó.

Hosting.com - lưu trữ chia sẻ
Hiệu năng cao, được trang bị CPU AMD EPYC, lưu trữ SSD NVMe và LiteSpeed, hỗ trợ chuyên gia nội bộ 24 giờ/ngày, các biện pháp bảo mật tiên tiến bao gồm SSL, chống brute force, phần mềm độc hại và bảo vệ DDoS, tiết kiệm tới 73%.

Hiểu về vòng lặp chính (main loop) của WordPress

Cấu trúc cơ bản của vòng lặp là một nhóm các lệnh được thực thi lần lượt theo một trình tự nhất định.ifwhileĐoạn mã này kiểm tra xem trong truy vấn hiện tại có bài viết nào không, sau đó duyệt qua từng bài viết để lấy dữ liệu của chúng (tiêu đề, nội dung, tác giả, v.v.) và sử dụng những dữ liệu đó cho các thẻ mẫu (template tags). Một cấu trúc vòng lặp điển hình như sau:

<!-- 在这里输出文章内容,例如: -->
        <h2><?php the_title(); ?></h2>
        <div><?php the_content(); ?></div>
    
    <p>Không tìm thấy bất kỳ bài viết nào.</p>
<?php endif; ?>

the_post()Hàm này được sử dụng để thiết lập dữ liệu cho bài viết hiện tại; chỉ sau khi thực hiện thao tác này thì các dữ liệu mới có thể được sử dụng.the_title()the_content()Các thẻ mẫu như vậy…

Tạo các tệp mẫu thông dụng

Để các chủ đề có thể xử lý một cách chuyên nghiệp các loại trang khác nhau, bạn cần tạo ra một số tệp mẫu cốt lõi. Đầu tiên là…header.phpfooter.phpDùng để tách mã phần đầu trang (header) và phần chân trang (footer) ra khỏi…index.phpNó được tách ra khỏi phần còn lại.header.phpTrong đó, hãy đặt những thứ từ…Nội dung bắt đầu sau dấu thẻ; ở đây…footer.phpTrong đó, đặt vào.Sau đó,index.phptrong đó, sử dụngget_header()get_footer()Chúng ta sử dụng các hàm để đưa chúng vào (tức là để sử dụng chúng trong chương trình).

Đọc thêm Hướng dẫn hoàn chỉnh phát triển chủ đề WordPress: Từ mã nhập môn đến kỹ thuật thực chiến

Tiếp theo, tạosingle.phpdành cho bài viết đơn lẻ,page.phpDành cho các trang web độc lập (trang web không phụ thuộc vào hệ thống nào cụ thể). Bạn có thể sử dụng những tệp này để lưu trữ các nội dung cần thiết trước.get_header()get_footer()Sau đó, hãy thêm các vòng lặp và cấu trúc HTML dành riêng cho từng bài viết hoặc trang web. Ví dụ:single.phpTrong quá trình thực hiện, có thể sẽ xảy ra việc gọi (call) các hàm hoặc phương thức nhất định.the_post_thumbnail()Để hiển thị hình ảnh đặc trưng của bài viết…page.phpNgày xuất bản có thể không được hiển thị.

Cuối cùng, hãy thực hiện việc tạo ra (create).archive.phpĐây là các trang dùng để quản lý việc phân loại, gắn thẻ, và xác định tác giả cho các tài liệu được lưu trữ. Trong tệp này, bạn thường sử dụng các công cụ hoặc quy trình nhất định để thực hiện các thao tác liên quan đến việc tổ chức và sắp xếp thông tin này.the_archive_title()Dưới đây là các tiêu đề của các bài viết đã được lưu trữ, cùng với một bản tóm tắt hoặc danh sách các nội dung chính của chúng:

Máy chủ chia sẻ của InterServer
Lưu trữ chia sẻ với mức phí $2,50 USD mỗi tháng, giảm giá $0,1 USD trong tháng đầu tiên, mã giảm giá tryinterserver, với 461 ứng dụng đám mây và cài đặt chỉ bằng một cú nhấp chuột.

Bằng cách tách các mẫu này ra, cấu trúc chủ đề của bạn sẽ trở nên rõ ràng và dễ bảo trì hơn.

Nâng cấp chức năng và phong cách của chủ đề (Enhance the functionality and style of the theme)

Sau khi hoàn thành khung chủ đề cơ bản, bước tiếp theo là thêm các tính năng và làm đẹp giao diện (styling). Điều này chủ yếu được thực hiện thông qua…functions.phpstyle.csstrong thư mục gốc của dự án.

Thêm các chức năng cốt lõi thông qua tệp tin hàm.

functions.phpTệp tin là nơi chính để bạn thêm các tính năng cho chủ đề của mình. Trước hết, bạn nên thêm hỗ trợ cho các tính năng cơ bản cho chủ đề đó; điều này được thực hiện thông qua…add_theme_support()Hàm thực hiện.

function my_first_theme_setup() {
    // 让主题支持文章和评论的RSS feed链接
    add_theme_support( 'automatic-feed-links' );
    // 让主题支持文章特色图像
    add_theme_support( 'post-thumbnails' );
    // 让主题支持HTML5的标记格式(用于搜索表单、评论表单等)
    add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) );
    // 让主题支持自定义Logo
    add_theme_support( 'custom-logo', array(
        'height'      => 100,
        'width'       => 400,
        'flex-height' => true,
        'flex-width'  => true,
    ) );
}
add_action( 'after_setup_theme', 'my_first_theme_setup' );

Thứ hai, bạn cần đăng ký vị trí của các mục trong menu và thanh bên (khu vực công cụ phụ) cho chủ đề đó. Hãy sử dụng các bước hướng dẫn để đăng ký menu.register_nav_menus()Hàm:

function my_first_theme_menus() {
    register_nav_menus( array(
        'primary' => __( '主导航菜单', 'my-first-theme' ),
        'footer'  => __( '页脚菜单', 'my-first-theme' ),
    ) );
}
add_action( 'init', 'my_first_theme_menus' );

Sau đó, bạn có thể sử dụng các nội dung đó trong tệp mẫu (ví dụ:header.php)sử dụngwp_nav_menu( array( 'theme_location' => 'primary' ) );ở vị trí tương ứng để hiển thị menu.

Nhập các định dạng (styles) và mã nguồn (scripts)

Cách đúng đắn để nhập tệp CSS và JavaScript là sử dụngwp_enqueue_style()wp_enqueue_script()hàm, gắn chúng vàowp_enqueue_scriptsNó được đặt trên những chiếc móc đó. Điều này đảm bảo rằng các mối phụ thuộc giữa các thành phần được thiết lập đúng cách và ngăn chặn việc tải lại các tài nguyên không cần thiết.

function my_first_theme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'my-first-theme-style', get_stylesheet_uri() );
    // 引入Google字体
    wp_enqueue_style( 'my-first-theme-google-fonts', 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap', array(), null );
    // 引入主题的JavaScript文件
    wp_enqueue_script( 'my-first-theme-navigation', get_template_directory_uri() . '/js/navigation.js', array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'my_first_theme_scripts' );

Viết các kiểu dáng cơ bản

Cuối cùng,style.cssTrong đó, bạn có thể bắt đầu viết các định dạng (styles). Hãy bắt đầu bằng cách thiết lập lại các định dạng mặc định của trình duyệt, sau đó từ từ thêm các định dạng cụ thể vào.bodyheaderNavi menu, nội dung bài viết, thanh bên cạnh, và…footerĐịnh nghĩa các kiểu trình bày (styles) cho trang web. Sử dụng các truy vấn phương tiện (media queries) trong thiết kế phản ứng (responsive design) để đảm bảo rằng giao diện của bạn hiển thị tốt trên điện thoại, máy tính bảng và máy tính để bàn. Bằng cách liên tục điều chỉnh và thử nghiệm, giao diện (skin) đầu tiên của bạn sẽ dần trở nên đẹp mắt và chuyên nghiệp

Tóm lại

Từ việc tạo ra một thứ gì đó chứa…style.cssindex.phpBắt đầu từ một thư mục đơn giản, và tiến dần đến việc xây dựng (build).header.phpfooter.phpsingle.phpCác tệp mẫu chuyên nghiệp, và sau đó là quá trình thực hiện thông qua…functions.phpBạn đã thêm các tính năng như chủ đề (theme), menu và script vào tệp tin, và vì vậy bạn đã hoàn thành phần quan trọng nhất trong quá trình xây dựng chủ đề WordPress đầu tiên của mình. Quá trình này không chỉ giúp bạn nắm vững các khái niệm then chốt như cấu trúc của các template, vòng lặp (loops), và các hook hành động (action hooks), mà còn giúp bạn hiểu rõ cách mà các chủ đề WordPress tách biệt dữ liệu, logic và phần hiển thị (presentation layer). Hãy tiếp tục thực hành và thử thêm nhiều template khác vào chủ đề của mình.search.php404.phpVới các tính năng cơ bản (như khả năng thay đổi màu sắc, phông chữ, bố cục trang) và những tính năng nâng cao (chẳng hạn như hỗ trợ tạo các loại bài viết tùy chỉnh), bạn sẽ có thể tạo ra những giao diện trang web (skin) mạnh mẽ và độc đáo hơn.

FAQ 常见问题

Phát triển chủ đề WordPress có bắt buộc phải thành thạo PHP không?

Đúng vậy, PHP là ngôn ngữ lập trình cốt lõi của WordPress. Để phát triển các giao diện (theme) có chức năng đầy đủ, bạn cần nắm vững ngữ pháp cơ bản của PHP, đặc biệt là các khái niệm về hàm, câu lệnh điều kiện, vòng lặp, và cách tương tác với API của WordPress (như các thẻ mẫu, hàm hook). HTML và CSS là nền tảng để xây dựng giao diện người dùng (frontend), trong khi JavaScript được sử dụng để thêm các hiệu ứng tương tác vào trang web.

Sự khác biệt giữa tệp functions.php của chủ đề (theme) và plugin là gì?

functions.phpCác tính năng trong tệp tin này được liên kết với chủ đề đang được kích hoạt. Nếu bạn thay đổi chủ đề, những tính năng đó sẽ không còn khả dụng nữa. Chúng thích hợp nhất để thêm những tính năng có mối liên hệ chặt chẽ với giao diện và bố cục của chủ đề đó, chẳng hạn như vị trí của các mục trong menu đặc trưng cho chủ đề, thanh bên cạnh, hoặc việc định nghĩa các mã ngắn (shortcodes) đặc thù của chủ đề.

Các tính năng do plugin cung cấp là độc lập với chủ đề (theme) được sử dụng; dù bạn chuyển đổi sang chủ đề nào, các tính năng của plugin thường vẫn được giữ nguyên. Plugin rất phù hợp để thêm những tính năng chung, không liên quan đến giao diện hoặc thiết kế của chủ đề, chẳng hạn như biểu mẫu liên hệ, tối ưu hóa SEO, hoặc hệ thống lưu trữ dữ liệu (cache). Một thực hành tốt là tạo các plugin cho những tính năng có thể được sử dụng lại trên nhiều chủ đề khác nhau.

Làm thế nào để chủ đề của tôi hỗ trợ đa ngôn ngữ (quốc tế hóa)?

Để một ứng dụng hỗ trợ nhiều ngôn ngữ (tức là tính chất quốc tế hóa – i18n), điều chính cần làm là bao bọc tất cả các chuỗi dữ liệu dành cho người dùng trong mã nguồn. Trong các tệp PHP, bạn có thể sử dụng các công cụ và phương pháp phù hợp để thực hiện điều này.__()_e()Bạn có thể sử dụng các hàm dịch để hiển thị văn bản. Trong các tệp JavaScript, bạn cũng cần thực hiện tương tự.wp_set_script_translations()Thực hiện xử lý tương tự.

Bạn cần phải…style.css“Text Domain” và…functions.phptrongload_theme_textdomain()Khi đó, hãy chỉ định một miền văn bản (Text Domain) duy nhất. Sau đó, sử dụng các công cụ như Poedit để quét mã nguồn của chủ đề (theme code) của bạn và tạo ra các tệp cần thiết..potĐây là tệp mẫu dịch thuật; những người thực hiện công việc dịch có thể sử dụng nó để tạo ra các tài liệu dịch tương ứng..po.moCác tệp ngôn ngữ. Hãy đặt những tệp ngôn ngữ này vào thư mục tương ứng của chủ đề (theme)./languages/Nó có thể được đặt ngay trong thư mục.

Làm thế nào để gỡ lỗi trong các chủ đề WordPress khi đang phát triển?

Kích hoạt chế độ gỡ lỗi (debug mode) của WordPress là bước quan trọng để phát hiện và giải quyết các vấn đề. Bạn có thể thực hiện điều này bằng cách chỉnh sửa cấu hình của trang quản trị WordPress.wp-config.phptệp trong thư mục gốc của WordPress, đặtWP_DEBUGHằng số được thiết lậptrueBạn cũng có thể kích hoạt chúng cùng lúc.WP_DEBUG_LOG(Ghi lại lỗi vào tệp nhật ký) vàWP_DEBUG_DISPLAY(Lỗi được hiển thị trên trang web.) Lưu ý rằng trước khi trang web được đưa vào sử dụng chính thức, hãy nhớ tắt chế độ gỡ lỗi (debug mode).

Ngoài ra, việc sử dụng công cụ phát triển của trình duyệt (mở bằng phím F12) để kiểm tra cấu trúc HTML, định dạng CSS và các lỗi trong console JavaScript là những công cụ không thể thiếu trong quá trình gỡ lỗi phía trước (front-end debugging). Đối với những logic PHP phức tạp, việc sử dụng các công cụ này càng trở nên cần thiết hơn.error_log()Các hàm hoặc các tiện ích gỡ lỗi chuyên dụng (chẳng hạn như Query Monitor) cũng có thể giúp tăng hiệu suất đáng kể.