Hướng dẫn cơ bản về phát triển theme WordPress: Xây dựng theme tùy chỉnh từ con số không

Đọc trong 3 phút
2026-03-11
2026-06-06
2,367
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.

Để xây dựng một chủ đề WordPress tùy chỉnh, trước tiên bạn cần hiểu rõ cấu trúc cơ bản của nó. Về cơ bản, một chủ đề WordPress được tối giản hóa là một tập hợp các tệp tin được lưu trữ trong thư mục `wp-content/themes` của trang web WordPress. Những tệp tin này bao gồm các thành phần cần thiết để tạo nên/wp-content/themes/Trong thư mục này, có hai tệp tin bắt buộc.style.cssindex.phpPhần đầu tiên không chỉ định kiểu dáng của chủ đề (theme) mà quan trọng hơn, phần ghi chú ở đầu tệp (header comments) còn chứa các thông tin meta về chủ đề, như tên chủ đề, tác giả, mô tả, v.v. Phần thứ hai là tệp mẫu mặc định; WordPress sẽ sử dụng nó khi không tìm thấy tệp mẫu cụ thể nào khác.

Ngoài hai tệp này, một chủ đề (theme) hoàn chỉnh thường còn bao gồm các tệp mẫu (template) khác, chẳng hạn như những tệp dùng để hiển thị từng bài viết riêng lẻ.single.phpDùng để hiển thị danh sách các bài viết.archive.php…và những thứ được sử dụng để hiển thị trang web.page.phpViệc hiểu rõ và tạo ra các tệp mẫu (template files) là yếu tố cốt lõi trong quá trình phát triển nội dung cho một chủ đề (theme).

Trước khi bắt đầu lập trình, bạn nên thiết lập một môi trường phát triển trên máy tính của mình, chẳng hạn bằng cách sử dụng XAMPP, MAMP hoặc Local by Flywheel. Điều này sẽ giúp bạn thực hiện các thử nghiệm và sửa lỗi một cách tự do mà không ảnh hưởng đến trang web trên mạng. Đồng thời, hãy đảm bảo rằng trình soạn thảo văn bản hoặc công cụ phát triển tích hợp (IDE) của bạn (như VS Code,PhpStorm) đã được cài đặt đầy đủ, và bạn đã nắm vững những kiến thức cơ bản về PHP, HTML, CSS và JavaScript.

Đọc thêm Hướng dẫn nhập môn phát triển chủ đề WordPress: Xây dựng chủ đề đầu tiên từ con số 0

Tạo tệp cơ sở và cấu trúc cho chủ đề

Tạo thư mục chủ đề và bảng định dạng (style sheet)

Đầu tiên, trong/wp-content/themes/Hãy tạo một thư mục mới trong thư mục hiện tại, ví dụ như đặt tên nó là “NewFolder”.my-first-themeSau đó, hãy tạo một thư mục mới bên trong thư mục đó.style.cssTạo một tệp tin, và nhập thông tin tiêu đề tệp (file header) sau đây:

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%
/*
Theme Name: 我的第一个主题
Theme URI: https://example.com/my-first-theme/
Author: 你的名字
Author URI: https://example.com/
Description: 这是一个用于学习的自定义WordPress主题入门示例。
Version: 1.0.0
License: GNU General Public License v2 or later
Text Domain: my-first-theme
*/

Đoạn chú thích này là yếu tố then chốt giúp WordPress nhận diện được chủ đề (theme) của trang web. Tiếp theo, bạn có thể thêm một số kiểu dáng (styles) cơ bản vào tệp CSS này.

Tạo tệp mẫu cốt lõi (Core Template File)

Tiếp theo, tạoindex.phpĐây là các tệp tin chứa mẫu thiết kế dự phòng cho tất cả các trang web. Đây là mẫu thiết kế đơn giản nhất.index.phpCó thể chỉ bao gồm cấu trúc cơ bản gồm phần đầu trang web (header), nội dung được hiển thị theo vòng lặp (looped content), và phần cuối trang web (footer).

<!DOCTYPE html>
<html no numeric noise key 1011>
<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 1008>
    <?php wp_body_open(); ?>
    <header>
        <h1><a href="/vi/</?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
        <p><?php bloginfo( 'description' ); ?></p>
    </header>
    <main>
        <?php
        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                the_content();
            endwhile;
        endif;
        ?>
    </main>
    <footer>
        <p>©</p>
    </footer>
    <?php wp_footer(); ?>
</body>
</html>

Tệp này sử dụng nhiều hàm cốt lõi của WordPress, chẳng hạn như…wp_head()body_class()the_content()V.v., những yếu tố này rất quan trọng đối với hoạt động bình thường của chủ đề (theme).

Hiểu và triển khai cấu trúc phân cấp mẫu

WordPress sử dụng một bộ quy tắc được gọi là “hệ thống cấp độ template” (template hierarchy) để quyết định file template nào sẽ được sử dụng cho một yêu cầu trang cụ thể. Việc hiểu rõ cấu trúc này là yếu tố then chốt để phát triển các giao diện (theme) một cách hiệu quả.

Đọc thêm Tạo website chuyên nghiệp bắt buộc: Hướng dẫn toàn diện về phát triển và tùy chỉnh chủ đề WordPress

Các tệp mẫu thường được sử dụng và chức năng của chúng

Khi truy cập trang chủ của trang web, WordPress sẽ tìm kiếm các thành phần theo thứ tự nhất định.front-page.phphome.phpcuối cùng mới đếnindex.phpĐối với trang danh sách bài viết trên blog, nó sẽ tìm kiếm…home.phpĐối với một bài viết cụ thể, hệ thống sẽ ưu tiên sử dụng thông tin từ nguồn đó.single-post.phphoặc thông dụngsingle.phpĐối với các trang tĩnh, hãy sử dụng…page.phpTrang mục lục tương ứngcategory.phpTrang tìm kiếm tương ứngsearch.phpTrang lỗi 404 tương ứng với…404.php

Bằng cách tạo ra những tệp mẫu này, bạn có thể thiết kế các bố cục và phong cách hoàn toàn khác nhau cho các phần khác nhau của trang web.

Sử dụng các thành phần mẫu (template components) để tách mã nguồn thành các phần nhỏ hơn.

Để giữ cho mã nguồn gọn gàng và dễ tái sử dụng, những phần lặp lại nên được tách ra thành các tệp “thành phần mẫu” (template components) riêng biệt. Cách phổ biến nhất là tách biệt phần tiêu đề (Header), phần chân trang (Footer) và thanh bên (Sidebar).

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%.

Tạo raheader.phptệp trong thư mục gốc của WordPress, đặtindex.phpThời điểm bắt đầu của thẻ…Di chuyển toàn bộ đoạn mã nằm trước thẻ vào bên trong. Sau đó, hãy sử dụng đoạn mã đó ở vị trí ban đầu.get_header()Gọi hàm.

// 在 index.php 中替换原来的代码
<?php get_header(); ?>

Tương tự như vậy, hãy thực hiện việc tạo (create)…footer.phpĐặt đoạn mã phần chân trang (footer code) vào tệp tin, sau đó sử dụng nó.get_footer()Bạn có thể gọi (call) chức năng đó, và bạn cũng có thể tự mình tạo (create) nó nữa.sidebar.phpVà sử dụng nó.get_sidebar()Việc sử dụng phương thức này đã nâng cao đáng kể mức độ mô-đun hóa của mã nguồn.

Tích hợp các chức năng cốt lõi của WordPress

Đưa vào vòng lặp các bài viết và hình ảnh đặc sắc

“Loop” (vòng lặp) là cơ chế cốt lõi mà WordPress sử dụng để truy xuất và hiển thị các bài viết từ cơ sở dữ liệu.index.phpsingle.phpTrong đó, chúng ta sử dụng…if ( have_posts() ) : while ( have_posts() ) : the_post();Hãy bắt đầu vòng lặp này. Bên trong vòng lặp, bạn có thể sử dụng một loạt thẻ mẫu (template tags) để hiển thị thông tin bài viết.

Đọc thêm Một hướng dẫn thực hành toàn diện về việc phát triển plugin cho WordPress, từ con số không đến việc xây dựng plugin đầu tiên của bạn

Ví dụ, sử dụngthe_title()xuất tiêu đề bài viết,the_permalink()xuất liên kết bài viết,the_content()xuất nội dung bài viết,the_excerpt()Để hỗ trợ hiển thị các hình ảnh đặc trưng của bài viết, trước tiên cần phải…functions.phpThêm tuyên bố hỗ trợ chủ đề vào tệp tin:

add_theme_support( 'post-thumbnails' );

Sau đó, trong vòng lặp của tệp mẫu, bạn có thể sử dụng (use) các công cụ hoặc cấu trúc phù hợp để thực hiện các thao tác cần thiết.the_post_thumbnail()Hãy hiển thị các hình ảnh đặc sắc.

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.

Tạo tệp `functions.php` để nâng cấp giao diện (theme) của trang web.

functions.phpTệp tin chính là “trung tâm điều khiển” cho chủ đề (theme) của bạn; nó không phải là thứ bắt buộc, nhưng hầu như mọi chủ đề đều sử dụng nó. Tại đây, bạn có thể thêm các tính năng mới, đăng ký các mục trong menu, định nghĩa các khu vực hiển thị công cụ hỗ trợ (widgets), và thêm các tập lệnh (scripts) cũng như bảng định dạ

Một cơ bảnfunctions.phpCó thể chứa các nội dung sau:

__( '顶部菜单', 'my-first-theme' ),
            'footer-menu' =&gt; __( '底部菜单', 'my-first-theme' ),
        )
    );
}
add_action( 'init', 'mytheme_register_menus' );

// 添加小工具区域支持
function mytheme_widgets_init() {
    register_sidebar(
        array(
            'name'          =&gt; __( '主侧边栏', 'my-first-theme' ),
            'id'            =&gt; 'sidebar-1',
            'description'   =&gt; __( '在此添加小工具。', 'my-first-theme' ),
            'before_widget' =&gt; '<section id="%1$s" class="widget %2$s">',
            'after_widget'  =&gt; '</section>',
            'before_title'  =&gt; '<h2 class="widget-title">',
            'after_title'   =&gt; '</h2>',
        )
    );
}
add_action( 'widgets_init', 'mytheme_widgets_init' );

// 引入主题样式表和脚本
function mytheme_enqueue_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'mytheme-style', get_stylesheet_uri(), array(), wp_get_theme()-&gt;get( 'Version' ) );
    // 引入主JavaScript文件
    wp_enqueue_script( 'mytheme-script', get_template_directory_uri() . '/js/main.js', array(), wp_get_theme()-&gt;get( 'Version' ), true );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_scripts' );
?&gt;

Thêm phong cách thiết kế và tính năng thích ứng với các thiết bị khác nhau (responsive design).

Xây dựng một khung CSS cơ bản

style.cssBắt đầu bằng cách thiết lập các kiểu trình bày (visual styles) cơ bản cho chủ đề của bạn. Bạn có thể bắt đầu bằng cách đặt các thiết lập chung cho mô hình khung (box model), phông chữ (fonts), và màu sắc (colors) trên toàn trang web.

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    line-height: 1.6;
    color: #333;
    background-color: #f9f9f9;
}

.container {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 20px;
}

Thực hiện bố cục thích ứng ưu tiên cho thiết bị di động

Các thiết kế theo phong cách hiện đại phải có khả năng thích ứng với nhiều loại thiết bị khác nhau (tính tương thích với nhiều màn hình). Cần áp dụng chiến lược ưu tiên cho thiết bị di động: trước tiên thiết kế giao diện cho màn hình nhỏ, sau đó sử dụng công cụ Media Queries để thêm hoặc thay đổi các đặc điểm thiết kế cho màn hình

/* 移动端基础样式 */
.main-navigation ul {
    display: flex;
    flex-direction: column;
    list-style: none;
}
.main-navigation li {
    border-bottom: 1px solid #ddd;
}

/* 平板及以上设备 */
@media (min-width: 768px) {
    .main-navigation ul {
        flex-direction: row;
    }
    .main-navigation li {
        border-bottom: none;
        margin-right: 2rem;
    }
    .content-area {
        width: 70%;
        float: left;
    }
    .widget-area {
        width: 28%;
        float: right;
    }
}

/* 桌面设备 */
@media (min-width: 1024px) {
    .container {
        padding: 0 40px;
    }
}

Đảm bảo hình ảnh cũng phản hồi, có thể thiết lập thông qua CSSmax-width: 100%; height: auto;Hoặc bạn có thể sử dụng những công cụ có sẵn trong WordPress.srcsetAttributethe_post_thumbnail()(The default output will be displayed.)

Tóm lại

Việc phát triển một theme WordPress từ đầu là một quá trình học tập có hệ thống, bao gồm nhiều khía cạnh như tạo cấu trúc tệp tin cơ bản, hiểu cách các thành phần của template được sắp xếp theo thứ bậc, phân tích từng thành phần của template, và sau đó là việc sử dụng những kiến thức đó để xây dựng nội dung cho themefunctions.phpTrong quá trình tích hợp các chức năng cốt lõi của WordPress, hãy dành thời gian để thiết kế giao diện và đảm bảo rằng trang web có khả năng thích ứng tốt trên nhiều loại thiết bị khác nhau (đáp ứng với các kích thước màn hình khác nhau). Quá trình này không chỉ giúp bạn hiểu sâu sắc cách thức hoạt động của WordPress mà còn cho bạn quyền kiểm soát hoàn toàn về ngoại hình và chức năng củastyle.cssindex.phpBắt đầu bằng cách từng bước thêm các tính năng mới vào hệ thống và tiến hành kiểm thử chúng là một con đường học tập an toàn và hiệu quả. Chủ đề đầu tiên của bạn có thể rất đơn giản, nhưng nó sẽ tạo nên nền tảng vững chắc cho việc xây dựng những dự án phức tạp và chuyên nghiệp hơn trong tương lai.

FAQ 常见问题

Phát triển chủ đề WordPress cần nắm những ngôn ngữ lập trình nào?

Để phát triển một theme WordPress hoàn chỉnh về chức năng, bạn cần nắm vững các ngôn ngữ và công cụ sau: PHP, HTML, CSS, và JavaScript. PHP đóng vai trò trung tâm, được sử dụng để xử lý logic và gọi các hàm của WordPress; HTML dùng để xây dựng cấu trúc trang web; CSS chịu trách nhiệm về thiết kế giao diện và bố cục; còn JavaScript thì giúp tạo ra các hiệu ứng tương tác và chức năng động trên trang web. Việc có kiến thức cơ bản về SQL cũng sẽ hữu ích trong việc hiểu cách WordPress thực hiện các truy vấn dữ liệu.

Tại sao theme tùy chỉnh của tôi không hiển thị trong trang quản trị?

Điều này thường được thực hiện bởi…style.cssLỗi này xảy ra do thông tin trong phần chú thích ở đầu tệp (header comments) bị sai hoặc bị thiếu. Vui lòng đảm bảo rằng tệp đó nằm trong thư mục gốc (root directory) của thư mục chứa các chủ đề (theme folder), và định dạng của khối chú thích ở đầu tệp phải đúng quy định, bao gồm các thông tin bắt buộc như “Theme Name”. Ngoài ra, hãy kiểm tra xem quyền truy cập vào thư mục chứa các chủ đề có đúng không.style.cssTệp tin đó không chứa lỗi ngữ pháp.

Làm thế nào để thêm mẫu trang tùy chỉnh cho chủ đề của tôi?

Đầu tiên, tạo một tệp PHP mới trong thư mục chủ đề của bạn, ví dụtemplate-fullwidth.phpỞ phần đầu tiên của tệp tin này, hãy thêm một dòng chú thích đặc biệt để định nghĩa tên của mẫu (template). Sau đó, bạn có thể viết bất kỳ mã PHP và HTML nào bạn muốn bên trong tệp tin này. Nhớ rằng bạn có thể sử dụng các thành phần từ các tệp mẫu khác (như…) để xây dựng nội dung của trang web.page.phpCác cấu trúc cơ bản như vòng lặp sao chép (copy loop) cũng có thể được sử dụng. Sau khi bạn hoàn thành việc tạo ra các thành phần này, khi bạn truy cập trang quản trị WordPress và chỉnh sửa trang, bạn sẽ thấy mẫu tùy chỉnh mà bạn đã tạo trong danh sách thả xuống “Mẫu” (Template) thuộc mục “Thuộc tính trang” (Page Properties). Bạn có thể chọn mẫu đó để sử dụng cho trang của

Làm thế nào để gỡ lỗi PHP một cách an toàn trong quá trình phát triển?

It is recommended to use the local development environment.wp-config.phpBật chế độ gỡ lỗi (debug mode) của WordPress trong tệp tin.WP_DEBUGHằng số được thiết lậptrueĐiều này sẽ hiển thị tất cả các lỗi, cảnh báo và thông báo của PHP trên màn hình. Để gỡ lỗi một cách chi tiết hơn, bạn có thể sử dụng các công cụ phát triển (debugging tools).WP_DEBUG_LOGGhi lại lỗi vào…/wp-content/debug.logTệp tin nằm bên trong. Vui lòng 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).