Chuẩn bị môi trường phát triển và hiểu rõ cấu trúc của chủ đề.
Trước khi bắt đầu viết mã, bạn cần một môi trường phát triển địa phương phù hợp. Được khuyến nghị sử dụng các công cụ như Local by Flywheel, XAMPP hoặc MAMP – chúng có thể thiết lập nhanh chóng một môi trường máy chủ chứa PHP, MySQL và Apache/Nginx. Đồng thời, hãy đảm bảo rằng trình soạn thảo văn bản hoặc IDE (như VS Code, PhpStorm) của bạn hỗ trợ chức năng tô sáng mã nguồn và kết nối FTP/SFTP.
Một chủ đề WordPress tiêu chuẩn thực chất là một thư mục có cấu trúc cụ thể, được lưu trữ tại… /wp-content/themes/ Trong thư mục đó, chỉ có hai tệp tin cốt lõi nhất.index.php 和 style.cssTrong đó,style.css Không chỉ là một bảng định dạng (style sheet), mà còn là một “tệp tuyên bố chủ đề” (theme declaration file), trong đó phần chú thích ở đầu tệp chứa các thông tin metadata về chủ đề đó.
/*
Theme Name: My Custom Theme
Theme URI: https://example.com/my-theme
Author: Your Name
Author URI: https://example.com
Description: 这是一个为展示而开发的自定义WordPress主题。
Version: 1.0.0
License: GNU General Public License v2 or later
Text Domain: my-custom-theme
*/ WordPress sử dụng đoạn mã chú thích này để nhận diện chủ đề (theme) của bạn.Text Domain Được sử dụng cho mục đích quốc tế hóa; đây là những mã định danh dùng để xác định các phần cần được dịch sau này.
Đọc thêm Hướng dẫn tối thượng phát triển chủ đề WordPress: Xây dựng chủ đề tùy chỉnh đầu tiên từ con số không。
Hiểu được mối quan hệ giữa các cấp độ của mẫu (template hierarchy)
WordPress sử dụng cơ chế “Cấu trúc phân cấp các mẫu” (Template Hierarchy) để quyết định sử dụng tệp mẫu nào cho từng loại nội dung khác nhau. Ví dụ, khi truy cập trang chủ của blog, WordPress sẽ tìm kiếm theo thứ tự nhất định để xác định mẫu cần hiển thị. home.phpnếu không tồn tại thì sử dụng index.phpĐối với một bài viết riêng lẻ, hệ thống sẽ ưu tiên tìm kiếm thông tin liên quan đến bài viết đó. single-post.php,sau đó là single.php,cuối cùng là index.php。
Việc hiểu rõ cơ chế này là yếu tố then chốt để phát triển các chủ đề (templates) một cách linh hoạt. Bạn không cần phải tạo tất cả các tệp template; chỉ cần tạo những tệp phù hợp với các loại trang mà bạn muốn tùy chỉnh. Những trang còn lại sẽ được xử lý tự động bởi hệ thống index.php Việc xử lý mẫu “dự phòng” cuối cùng này…
Xây dựng các tệp mẫu cốt lõi
Các tệp mẫu (template files) chính là “khung xương” của một chủ đề (theme), và chúng quy định cấu trúc HTML cho các phần khác nhau của trang web. Chúng ta sẽ bắt đầu bằng cách tạo ra một vài tệp cần thiết và thường được sử dụng nhất.
Tạo các mẫu đầu trang (header) và cuối trang (footer).
Để tuân theo nguyên tắc DRY (Don’t Repeat Yourself – Đừng lặp lại bản thân), các chủ đề WordPress thường tách phần Tiêu đề (Header) và Phần chân trang (Footer) thành các tệp riêng biệt.
Header file header.php Bao gồm từ... <!DOCTYPE html> Tất cả các đoạn mã từ phần bắt đầu đến trước khu vực nội dung chính; điều quan trọng là phải thực hiện lệnh gọi (call) tương ứng. wp_head() Đây là một hàm (function) cho phép phần cốt lõi của WordPress, các plugin, và các giao diện (themes) chèn vào đây những đoạn mã cần thiết (chẳng hạn như các liên kết đến bảng định dạng (style sheets) hoặc các thẻ meta).
<!DOCTYPE html>
<html no numeric noise key 1006>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php wp_head(); ?>
</head>
<body no numeric noise key 1003>
<?php wp_body_open(); ?>
<header id="masthead" class="site-header">
<h1 class="site-title"><a href="/vi/</?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
</header> File at the end footer.php Nó sẽ bao gồm toàn bộ nội dung ở phía dưới trang, và thực hiện lệnh gọi (call) trước khi kết thúc. wp_footer() Các hàm (functions) đóng vai trò vô cùng quan trọng trong việc tải các tập lệnh (scripts) và tính năng của các tiện ích mở rộng (plugins).
<footer id="colophon" class="site-footer">
<p>©</p>
</footer>
<?php wp_footer(); ?>
</body>
</html> Assemble the main index template.
index.php Là một mẫu cơ bản nhất, trách nhiệm của nó là được sử dụng để… get_header() 和 get_footer() Phần đầu và phần cuối của hàm được thiết lập để chứa các thông tin cần thiết, và trong giữa chúng, một vòng lặp chính được sử dụng để hiển thị nội dung.
<?php get_header(); ?>
<main id="primary" class="site-main">
<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
?>
<article no numeric noise key 1006>
<h2><a href="/vi/</?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
</article>
<?php
endwhile;
the_posts_navigation();
else :
echo '<p>暂无文章。</p>';
endif;
?>
</main> Trong mẫu này… have_posts() 和 the_post() Các hàm tạo nên vòng lặp chính (The Loop) trong WordPress, và chúng là nền tảng để hiển thị nội dung của tất cả các bài viết. Các hàm như… the_title()、the_content()、the_permalink() Dùng để hiển thị dữ liệu bài viết tương ứng bên trong vòng lặp.
Tích hợp các tính năng nâng cao cùng với các thành phần thiết kế (theme components)
Một chủ đề chuyên nghiệp không chỉ hiển thị nội dung mà còn cung cấp nhiều tính năng và thành phần hữu ích. Điều này đòi hỏi bạn phải hiểu sâu về thư viện hàm và hệ thống hook của WordPress.
Thêm chức năng điều hướng menu
Menu điều hướng là một thành phần quan trọng của trang web. Đầu tiên, bạn cần phải… (The navigation menu is a key component of a website; first, you need to…) functions.php trong tệp register_nav_menus() Hàm đăng ký một hoặc nhiều vị trí mục (menu items).
function my_custom_theme_setup() {
register_nav_menus( array(
'primary' => __( '主导航菜单', 'my-custom-theme' ),
'footer' => __( '页脚菜单', 'my-custom-theme' ),
) );
}
add_action( 'after_setup_theme', 'my_custom_theme_setup' ); Sau đó, trong tệp mẫu (như header.php)vị trí bạn muốn hiển thị menu trong đó, sử dụng wp_nav_menu() hàm để gọi nó.
<?php
wp_nav_menu( array(
'theme_location' => 'primary',
'menu_class' => 'primary-menu',
'container' => 'nav',
'container_class'=> 'main-navigation',
) );
?> Người dùng hiện có thể tạo các menu trong phần “Giao diện” -> “Menu” của giao diện quản trị WordPress, sau đó gán chúng vào vị trí “Menu điều hướng chính” (Main Navigation Menu).
Bật tính năng hiển thị ảnh thu nhỏ của bài viết và khu vực công cụ (toolbar).
Hình ảnh đặc trưng của bài viết (hình thu nhỏ) và các tiện ích nhỏ (Widget) là những tính năng quan trọng giúp tăng tính linh hoạt trong việc trình bày nội dung. Điều này cũng đúng trong trường hợp này. functions.php Trong đó, chúng được kích hoạt thông qua các hàm hỗ trợ chủ đề (theme support functions).
function my_custom_theme_features() {
// 启用文章和页面特色图像
add_theme_support( 'post-thumbnails' );
// 为文章定义缩略图尺寸
set_post_thumbnail_size( 1200, 630, true );
// 启用小工具和选择性刷新
add_theme_support( 'widgets' );
add_theme_support( 'customize-selective-refresh-widgets' );
}
add_action( 'after_setup_theme', 'my_custom_theme_features' ); Bạn có thể sử dụng tính năng này để đăng ký một khu vực chứa các tiện ích (widgets) cho thanh bên cạnh (sidebar). register_sidebar() Hàm.
function my_custom_theme_widgets_init() {
register_sidebar( array(
'name' => __( '侧边栏', 'my-custom-theme' ),
'id' => 'sidebar-1',
'description' => __( '在此添加小工具。', 'my-custom-theme' ),
'before_widget' => '<section id="%1$s" class="widget %2$s">',
'after_widget' => '</section>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
) );
}
add_action( 'widgets_init', 'my_custom_theme_widgets_init' ); Sau đó, bạn có thể sử dụng nó trong các ứng dụng hoặc môi trường tương ứng như… sidebar.php Sử dụng trong tệp mẫu (template file). dynamic_sidebar( 'sidebar-1' ) để xuất khu vực này.
Thực hiện thiết kế phản ứng với các thiết bị khác nhau và tổ chức các phong cách (styles) một cách hợp lý.
Các trang web hiện đại phải hiển thị tốt trên mọi loại thiết bị. Điều này đòi hỏi rằng giao diện (theme) bạn sử dụng phải có khả năng thích ứng với kích thước màn hình khác nhau (tính chất “responsive”).
Áp dụng nguyên tắc “mobile-first” trong thiết kế CSS
在 style.css Trong quá trình thiết kế, hãy bắt đầu bằng việc xác định các kiểu dáng cơ bản cho thiết bị di động, sau đó sử dụng các truy vấn phương tiện truyền thông (Media Queries) để từng bước tùy chỉnh giao diện cho màn hình lớn hơn. Điều này sẽ đảm bảo rằng nội dung cốt lõi luôn được hiển thị một cách dễ dàng trên mọi loại thiết bị.
/* 基础样式 (移动设备) */
.site-header {
padding: 1rem;
text-align: center;
}
.site-main {
padding: 1rem;
}
.widget {
margin-bottom: 2rem;
}
/* 中等屏幕 (平板) */
@media (min-width: 768px) {
.site-header {
display: flex;
justify-content: space-between;
align-items: center;
text-align: left;
}
.site-main {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 2rem;
}
}
/* 大屏幕 (桌面) */
@media (min-width: 1024px) {
.container {
max-width: 1200px;
margin: 0 auto;
}
} Cách đưa JavaScript vào trang web một cách an toàn:
Để đảm bảo hiệu suất và tránh xung đột, bạn nên sử dụng những công cụ hoặc phương thức được WordPress khuyến nghị. wp_enqueue_script() Các phương pháp để tải các tệp JavaScript. Quá trình này thường diễn ra trong… functions.php Hoàn thành tại đây.
function my_custom_theme_scripts() {
// 为主题的主样式表排队
wp_enqueue_style( 'my-custom-theme-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );
// 为主题的主 JavaScript 文件排队
wp_enqueue_script( 'my-custom-theme-navigation', get_template_directory_uri() . '/js/navigation.js', array(), wp_get_theme()->get( 'Version' ), true );
// 为评论回复链接添加条件脚本(如果页面支持评论)
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
}
add_action( 'wp_enqueue_scripts', 'my_custom_theme_scripts' ); Phương pháp này cho phép WordPress quản lý các mối phụ thuộc (dependencies) giữa các thành phần của hệ thống, đồng thời cung cấp một điểm kiểm soát trung tâm mà các plugin và các theme khác có thể tương tác một cách an toàn với nó.
Tóm lại
Việc phát triển một chủ đề WordPress tùy chỉnh từ đầu là một quá trình mang tính hệ thống, đòi hỏi bạn phải nắm vững các kỹ thuật front-end như HTML/CSS/JavaScript, logic server-side bằng PHP, cũng như có hiểu biết sâu rộng về cấu trúc cốt lõi của WordPress. Các bước chính bao gồm: thiết lập môi trường phát triển và tìm hiểu cấu trúc của các tệp chủ đề; tạo các tệp mẫu cốt lõi, đặc biệt là sử dụng cấu trúc phân cấp của các mẫu và vòng lặp chính để hiển thị nội dung; thông qua… functions.php Trang web được tích hợp các tính năng nâng cao như menu, ảnh thu nhỏ (thumbnails), tiện ích (widgets), v.v. Ngoài ra, thiết kế của trang web được thực hiện theo nguyên tắc phản ứng với các thiết bị khác nhau (responsive design) và các đoạn mã (scripts) được viết một cách an toàn, nhằm đảm bảo tính hiện đại cũng như hiệu suất cao của trang web. Bằng cách tuân theo những bước này, bạn không chỉ có thể xây dựng một trang web độc đáo phù hợp với nhu cầu cụ thể mà còn có thể hiểu rõ cách thức hoạt động của WordPress, từ đó đặt nền tảng vững chắc cho việc đối mặt với những thách thức phát triển phức tạp hơn trong tương lai.
FAQ 常见问题
Phát triển theme WordPress có bắt buộc phải thành thạo PHP không?
Đúng vậy, việc có một nền tảng PHP vững chắc là điều kiện bắt buộc. WordPress được xây dựng bằng PHP; các hàm cốt lõi, thẻ mẫu, hệ thống hook và khả năng tương tác với cơ sở dữ liệu của nó đều phụ thuộc vào PHP. Mặc dù bạn có thể thực hiện một số tùy chỉnh thông qua các công cụ xây dựng trang (page builders) và các gói phụ thêm (subthemes), nhưng để tạo ra một gói phụ thêm tự thiết kế với chức năng đầy đủ và logic rõ ràng, việc hiểu sâu về PHP là điều không thể thiếu.
Làm thế nào để chủ đề của tôi hỗ trợ dịch đa ngôn ngữ?
Bạn cần sử dụng các tính năng quốc tế hóa (i18n) và địa phương hóa (l10n) của WordPress. Trong mã nguồn, tất cả các chuỗi văn bản dành cho người dùng phải được bao bọc bởi các hàm dịch. Ví dụ: __('文本', 'my-custom-theme') 或 _e('文本', 'my-custom-theme')Đồng thời, hãy đảm bảo rằng…style.cssPhần đầu và tất cả các nội dung khác…load_theme_textdomain()Đã thiết lập đúng trong quá trình gọi.Text DomainSau đó, bạn có thể sử dụng các công cụ như Poedit để tạo ra (hoặc chỉnh sửa) tài liệu cần thiết..pottệp mẫu, để người dịch tạo.po和.moTệp ngôn ngữ.
Thế nào là chủ đề con (subtopic), và tôi có nên sử dụng nó không?
Chủ đề con (Child Theme) là một chủ đề phụ thuộc vào một chủ đề khác (chủ đề cha), chỉ chứa tệp kiểu dáng riêng và một số tệp mẫu đã được sửa đổi. Khi chủ đề cha được cập nhật, các thay đổi của chủ đề con sẽ không bị ghi đè. Nếu bạn chủ yếu muốn ghi đè kiểu dáng hoặc điều chỉnh một số chức năng nhỏ (như thêm hàm tùy chỉnh hoặc ghi đè một vài tệp mẫu) cho chủ đề hiện có, rất khuyến khích sử dụng chủ đề con. Nó an toàn hơn và bảo trì đơn giản hơn. Tuy nhiên, nếu bạn muốn tạo ra cấu trúc và logic hoàn toàn khác biệt so với bất kỳ chủ đề hiện có nào, thì việc phát triển chủ đề độc lập từ đầu là lựa chọn tốt hơn.
Sau khi hoàn thành quá trình phát triển, làm thế nào để đăng tema (theme) lên danh mục chính thức của WordPress?
Việc gửi một chủ đề (theme) lên thư mục chủ đề của WordPress.org là một quá trình nghiêm ngặt. Trước hết, mã nguồn của bạn phải tuân thủ các tiêu chuẩn lập trình của WordPress cũng như các yêu cầu kiểm duyệt chủ đề, bao gồm khía cạnh bảo mật, khả năng truy cập (accessibility), chất lượng mã nguồn, v.v. Bạn cần có một tài khoản trên WordPress.org và phải gửi mã nguồn lên kho lưu trữ SVN (Subversion). Chủ đề phải được cấp phép theo giấy phép GPL (GNU General Public License) và không được kèm theo các plugin có phí, cũng như không chứa bất kỳ mã độc hại nào. Quá trình kiểm duyệt có thể mất vài tuần; các nhà kiểm duyệt sẽ đưa ra phản hồi, và bạn cần sửa đổi chủ đề dựa trên những phản hồi đó cho đến khi chủ đề được chấp thuận.
Bước tiếp theo, chúng ta nên làm gì tiếp theo?
Đọc thêm và kiến thức thực tế
Những nội dung sau đây liên quan đến chủ đề của bài viết này, thích hợp để tiếp tục đọc sâu hơn. Ưu tiên bắt đầu với bài viết gần nhất với vấn đề hiện tại của bạn, rồi dần dần mở rộng sang các chủ đề xung quanh, hiệu quả thường sẽ tốt hơn.
- Hướng dẫn phát triển chủ đề WordPress: Xây dựng trang web tùy chỉnh từ con số không
- Hướng dẫn toàn diện về phát triển theme WordPress: Từ con số không đến thành thục thông qua các bài học thực hành
- Hướng dẫn đầy đủ về phát triển chủ đề WordPress: Xây dựng các mẫu trang web chuyên nghiệp từ con số không
- Thực hành phát triển theme WordPress: Xây dựng từ đầu một trang web doanh nghiệp thích ứng với mọi thiết bị
- Xây dựng chủ đề WordPress mà không cần code: Hướng dẫn đầy đủ từ đầu đến nâng cao