
WordPress là một hệ thống quản lý nội dung (CMS) mạnh mẽ và phổ biến nhất hiện nay. Với khả năng tùy chỉnh linh hoạt, nó được sử dụng để xây dựng mọi loại website, từ blog cá nhân đến trang thương mại điện tử. Trong bài viết này, chúng ta sẽ tìm hiểu cấu trúc của một theme WordPress và cách mà cơ sở dữ liệu của nó được tổ chức.
Cấu trúc Theme#
Một theme WordPress là tập hợp các tệp tin quyết định cách website hiển thị giao diện cho người dùng. Theme không chỉ cung cấp giao diện mà còn cho phép bạn tùy chỉnh các thành phần như bài viết, trang, menu, và widget.1.Tệp chính cần có trong theme#
-
-
- style.css
Tệp này chứa thông tin về theme (phần đầu của file) và các quy tắc CSS dùng để định dạng giao diện.
Cấu trúc:
CSS: Thêm mã định dạng giao diện như:/* Theme Name: Tên theme Theme URI: URL của theme Author: Tên tác giả Author URI: URL của tác giả Description: Mô tả ngắn gọn theme Version: 1.0 License: GPL v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Text Domain: tên-theme Tags: responsive, blog, e-commerce */
body { font-family: system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; background-color: #f4f4f4; }
- index.php
Đây là tệp trung tâm, bắt buộc của theme. WordPress sử dụng tệp này để hiển thị nội dung nếu không có tệp mẫu cụ thể nào khác.
<?php get_header(); ?> <main> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <h2><?php the_title(); ?></h2> <div><?php the_content(); ?></div> <?php endwhile; ?> <?php else : ?> <p>Không tìm thấy nội dung.</p> <?php endif; ?> </main> <?php get_footer(); ?>
- functions.php
Tệp này chứa các đoạn mã PHP dùng để mở rộng hoặc tùy chỉnh chức năng của theme (đăng ký menu, widget, scripts, styles,...).
Ví dụ các chức năng:
- Đăng ký menu:
function theme_setup() { register_nav_menus( array( 'primary' => __( 'Primary Menu', 'ten-theme' ), )); } add_action( 'after_setup_theme', 'theme_setup' );
- Thêm CSS/JS:
function enqueue_scripts() { wp_enqueue_style( 'main-style', get_stylesheet_uri() ); wp_enqueue_script( 'main-js', get_template_directory_uri() . '/assets/js/main.js', array('jquery'), null, true ); } add_action( 'wp_enqueue_scripts', 'enqueue_scripts' );
- Đăng ký menu:
- header.php
Tệp này chứa phần header của website, thường gồm thẻ
<head>
và mở thẻ<body>
.<!DOCTYPE html> <html <?php language_attributes(); ?>> <head> <meta charset="<?php bloginfo( 'charset' ); ?>"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php bloginfo( 'name' ); ?> - <?php bloginfo( 'description' ); ?></title> <?php wp_head(); ?> </head> <body <?php body_class(); ?>> <header> <h1><a href="<?php echo home_url(); ?>"><?php bloginfo( 'name' ); ?></a></h1> <nav> <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?> </nav> </header>
- footer.php
Tệp này chứa phần footer của website, thường gồm phần kết thúc
<body>
và thẻ đóng<html>
.<footer> <p>© <?php echo date('Y'); ?> <?php bloginfo( 'name' ); ?>. All rights reserved.</p> </footer> <?php wp_footer(); ?> </body> </html>
- sidebar.php
Tệp này dùng để hiển thị sidebar, thường là các widget hoặc menu bên.
<aside> <?php if ( is_active_sidebar( 'main-sidebar' ) ) : ?> <?php dynamic_sidebar( 'main-sidebar' ); ?> <?php else : ?> <p>Chưa có widget nào được thêm vào.</p> <?php endif; ?> </aside>
- single.php
Tệp hiển thị nội dung chi tiết của một bài viết.
<?php get_header(); ?> <main> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h1><?php the_title(); ?></h1> <div><?php the_content(); ?></div> <p>Tác giả: <?php the_author(); ?></p> <?php endwhile; endif; ?> </main> <?php get_footer(); ?>
- page.php
Tệp hiển thị nội dung của một trang.
<?php get_header(); ?> <main> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h1><?php the_title(); ?></h1> <div><?php the_content(); ?></div> <?php endwhile; endif; ?> </main> <?php get_footer(); ?>
- archive.php
Tệp hiển thị danh sách các bài viết thuộc một danh mục, thẻ hoặc tác giả.
<?php get_header(); ?> <main> <h1><?php the_archive_title(); ?></h1> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php endwhile; ?> <?php else : ?> <p>Không tìm thấy bài viết.</p> <?php endif; ?> </main> <?php get_footer(); ?>
- search.php
Tệp hiển thị kết quả tìm kiếm.
<?php get_header(); ?> <main> <h1>Kết quả tìm kiếm cho: "<?php echo get_search_query(); ?>"</h1> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php endwhile; ?> <?php else : ?> <p>Không tìm thấy kết quả nào.</p> <?php endif; ?> </main> <?php get_footer(); ?>
- 404.php
Tệp hiển thị khi không tìm thấy nội dung.
<?php get_header(); ?> <main> <h1>404 - Không tìm thấy trang</h1> <p>Xin lỗi, trang bạn tìm không tồn tại. <a href="<?php echo home_url(); ?>">Quay về trang chủ</a>.</p> </main> <?php get_footer(); ?>
- style.css
Tệp này chứa thông tin về theme (phần đầu của file) và các quy tắc CSS dùng để định dạng giao diện.
Cấu trúc:
-
Download Basic Template
2. Thư mục phổ biến#
- /assets/
Chứa các tài nguyên như hình ảnh, CSS, JavaScript:
/assets/css/
/assets/js/
/assets/images/
- /template-parts/ Lưu trữ các phần giao diện nhỏ (header, footer, bài viết) để tái sử dụng.
3. Các tệp tùy chọn khác#
- archive-{post-type}.php Hiển thị danh sách bài viết của một post type cụ thể.
- category.php Hiển thị danh sách bài viết trong một danh mục cụ thể.
- tag.php Hiển thị danh sách bài viết thuộc một thẻ.
- author.php Hiển thị danh sách bài viết của một tác giả.
- comments.php Hiển thị bình luận và biểu mẫu bình luận.
4. File screenshot.png
#
- Ảnh đại diện của theme, được hiển thị trong giao diện quản trị. Kích thước thường là 1200x900px.
my-theme/
├── assets/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── images/
│ └── logo.png
├── template-parts/
│ ├── header.php
│ ├── footer.php
│ └── content-post.php
├── style.css
├── functions.php
├── index.php
├── header.php
├── footer.php
├── single.php
├── page.php
├── archive.php
├── search.php
├── 404.php
└── screenshot.png
Giải thích:#
- my-theme/: Thư mục gốc của theme.
- assets/: Chứa các tài nguyên như CSS, JavaScript, hình ảnh.
- css/: Thư mục cho các tệp CSS.
- js/: Chứa các tệp JavaScript.
- images/: Lưu hình ảnh của theme.
- template-parts/: Thư mục để chia nhỏ các thành phần giao diện (header, footer, nội dung bài viết, v.v.).
- style.css: Tệp chính cho CSS và thông tin của theme.
- functions.php: Tệp khai báo các chức năng của theme.
- index.php: Tệp trung tâm, hiển thị khi không tìm thấy tệp phù hợp.
- header.php, footer.php: Phần header và footer.
- single.php: Hiển thị bài viết đơn lẻ.
- page.php: Hiển thị các trang.
- archive.php: Hiển thị danh mục, thẻ, hoặc bài viết lưu trữ.
- search.php: Kết quả tìm kiếm.
- 404.php: Trang lỗi.
- screenshot.png: Ảnh đại diện cho theme.
Cấu trúc Database#
Cơ sở dữ liệu WordPress được thiết kế chặt chẽ để quản lý nội dung, người dùng, và các tùy chỉnh. Khi cài đặt, WordPress tạo ra 12 bảng mặc định, với mối quan hệ chặt chẽ giữa chúng. Dưới đây là cấu trúc cơ bản của cơ sở dữ liệu WordPress, bao gồm các bảng mặc định khi WordPress được cài đặt:1. Bảng wp_posts#
- Mục đích: Lưu trữ tất cả nội dung như bài viết, trang, menu, tệp đính kèm, và các loại nội dung tùy chỉnh (custom post type).
- Các cột quan trọng:
ID
: ID của bài viết (primary key).post_author
: ID của tác giả.post_date
: Ngày xuất bản bài viết.post_content
: Nội dung bài viết.post_title
: Tiêu đề bài viết.post_status
: Trạng thái bài viết (publish
,draft
,pending
, v.v.).post_type
: Loại bài viết (post
,page
,attachment
, custom post types).post_parent
: ID của bài viết cha (dùng cho menu hoặc trang con).
2. Bảng wp_postmeta#
- Mục đích: Lưu trữ thông tin bổ sung (metadata) của các bài viết.
- Các cột quan trọng:
meta_id
: ID của metadata (primary key).post_id
: ID của bài viết liên kết đến metadata.meta_key
: Khóa metadata (ví dụ:_thumbnail_id
,views
, v.v.).meta_value
: Giá trị metadata.
3. Bảng wp_terms#
- Mục đích: Lưu trữ các thuật ngữ (terms) như danh mục, thẻ, hoặc taxonomy tùy chỉnh.
- Các cột quan trọng:
term_id
: ID của term (primary key).name
: Tên của term.slug
: Đường dẫn thân thiện với SEO.
4. Bảng wp_termmeta#
- Mục đích: Dùng để lưu metadata (dữ liệu bổ sung) liên quan đến terms (thuật ngữ) trong các taxonomies (phân loại) như categories, tags, hoặc custom taxonomies mà bạn tạo ra.
- Các cột quan trọng:
meta_id
: ID tự tăng của metadata (khóa chính)..term_id
: ID của term mà metadata này liên kết.meta_key
: Tên của metadata (khóa meta).meta_value
: Giá trị của metadata (có thể lưu trữ chuỗi, số, hoặc dữ liệu dạng khác).
5. Bảng wp_term_taxonomy#
- Mục đích: Liên kết terms với taxonomy.
- Các cột quan trọng:
term_taxonomy_id
: ID của term taxonomy (primary key).term_id
: Liên kết đếnterm_id
trong bảngwp_terms
.taxonomy
: Tên của taxonomy (category
,post_tag
, custom taxonomy).description
: Mô tả của taxonomy.
6. Bảng wp_term_relationships#
- Mục đích: Liên kết giữa bài viết (hoặc đối tượng khác) và terms.
- Các cột quan trọng:
object_id
: ID của bài viết (hoặc đối tượng).term_taxonomy_id
: ID của term taxonomy (liên kết đến bảngwp_term_taxonomy
).
7. Bảng wp_users#
- Mục đích: Lưu trữ thông tin người dùng.
- Các cột quan trọng:
ID
: ID của người dùng (primary key).user_login
: Tên đăng nhập.user_pass
: Mật khẩu được mã hóa (hashed).user_email
: Địa chỉ email.user_registered
: Ngày đăng ký.display_name
: Tên hiển thị.
8. Bảng wp_usermeta#
- Mục đích: Lưu trữ metadata của người dùng.
- Các cột quan trọng:
umeta_id
: ID của metadata (primary key).user_id
: ID của người dùng liên kết đến metadata.meta_key
: Khóa metadata (nickname
,wp_capabilities
, v.v.).meta_value
: Giá trị metadata.
9. Bảng wp_comments#
- Mục đích: Lưu trữ các bình luận.
- Các cột quan trọng:
comment_ID
: ID của bình luận (primary key).comment_post_ID
: ID bài viết được bình luận.comment_author
: Tên tác giả bình luận.comment_author_email
: Email của tác giả bình luận.comment_content
: Nội dung bình luận.comment_approved
: Trạng thái của bình luận (1
: đã duyệt,0
: chờ duyệt).
10. Bảng wp_commentmeta#
- Mục đích: Lưu trữ metadata của bình luận.
- Các cột quan trọng:
meta_id
: ID của metadata (primary key).comment_id
: ID của bình luận liên kết đến metadata.meta_key
: Khóa metadata.meta_value
: Giá trị metadata.
11. Bảng wp_options#
- Mục đích: Lưu trữ các thiết lập và tùy chọn của website.
- Các cột quan trọng:
option_id
: ID của tùy chọn (primary key).option_name
: Tên của tùy chọn (siteurl
,home
,blogname
, v.v.).option_value
: Giá trị của tùy chọn.autoload
: Xác định tùy chọn có tự động tải hay không (yes
hoặcno
).
12. Bảng wp_links (ít sử dụng trong phiên bản mới)#
- Mục đích: Lưu trữ các liên kết blogroll (tính năng cũ).
- Các cột quan trọng:
link_id
: ID của liên kết (primary key).link_url
: URL của liên kết.link_name
: Tên của liên kết.
Danh sách 12 bảng cơ sở dữ liệu WordPress với kiểu dữ liệu#
Tên bảng | Chức năng | Kiểu dữ liệu (các cột chính) |
---|---|---|
wp_users |
Chứa thông tin người dùng, bao gồm username, password (mã hóa), email, và thông tin liên quan. | ID (BIGINT), user_login (VARCHAR), user_pass (VARCHAR), user_email (VARCHAR), user_registered (DATETIME) |
wp_usermeta |
Lưu dữ liệu meta (tùy chỉnh) liên quan đến người dùng. | umeta_id (BIGINT), user_id (BIGINT), meta_key (VARCHAR), meta_value (LONGTEXT) |
wp_posts |
Lưu trữ toàn bộ nội dung (bài viết, trang, menu, và các loại bài viết tùy chỉnh). | ID (BIGINT), post_author (BIGINT), post_date (DATETIME), post_content (LONGTEXT), post_type (VARCHAR) |
wp_postmeta |
Chứa metadata liên quan đến các bài viết (ví dụ: giá sản phẩm, tùy chỉnh bài viết). | meta_id (BIGINT), post_id (BIGINT), meta_key (VARCHAR), meta_value (LONGTEXT) |
wp_terms |
Lưu các thuật ngữ (terms) dùng trong phân loại (taxonomies) như category, tag, hoặc taxonomy tùy chỉnh. | term_id (BIGINT), name (VARCHAR), slug (VARCHAR), term_group (BIGINT) |
wp_termmeta |
Lưu metadata liên quan đến các thuật ngữ (terms). | meta_id (BIGINT), term_id (BIGINT), meta_key (VARCHAR), meta_value (LONGTEXT) |
wp_term_taxonomy |
Lưu thông tin loại phân loại (taxonomy) của các thuật ngữ (terms), như category hay tag . |
term_taxonomy_id (BIGINT), term_id (BIGINT), taxonomy (VARCHAR), description (LONGTEXT) |
wp_term_relationships |
Liên kết bài viết hoặc custom post với các thuật ngữ (terms) trong các phân loại (taxonomies). | object_id (BIGINT), term_taxonomy_id (BIGINT), term_order (INT) |
wp_options |
Lưu các tùy chọn và cài đặt chung của WordPress, bao gồm các cài đặt theme và plugin. | option_id (BIGINT), option_name (VARCHAR), option_value (LONGTEXT), autoload (VARCHAR) |
wp_comments |
Lưu bình luận của người dùng trên các bài viết hoặc trang. | comment_ID (BIGINT), comment_post_ID (BIGINT), comment_author (VARCHAR), comment_content (TEXT), comment_date (DATETIME) |
wp_commentmeta |
Lưu metadata liên quan đến các bình luận (như trạng thái, tùy chỉnh). | meta_id (BIGINT), comment_id (BIGINT), meta_key (VARCHAR), meta_value (LONGTEXT) |
wp_links |
Lưu thông tin liên kết (blogroll) – hiện nay ít được sử dụng trong WordPress hiện đại. | link_id (BIGINT), link_url (VARCHAR), link_name (VARCHAR), link_target (VARCHAR), link_rel (VARCHAR) |
Giải thích các kiểu dữ liệu chính:#
BIGINT
: Số nguyên lớn, dùng để lưu các ID (ví dụ:post_id
,user_id
).VARCHAR
: Chuỗi ký tự ngắn (dài tối đa 255 ký tự).LONGTEXT
: Chuỗi ký tự rất dài, dùng để lưu nội dung chi tiết (ví dụ: bài viết, metadata).DATETIME
: Lưu thời gian và ngày, định dạngYYYY-MM-DD HH:MM:SS
.TEXT
: Chuỗi ký tự dài, dùng để lưu nội dung như bình luận hoặc mô tả ngắn.INT
: Số nguyên nhỏ, dùng cho các giá trị như thứ tự (term_order
).
Mối quan hệ giữa các bảng#
- Người dùng (
wp_users
,wp_usermeta
):- Mỗi người dùng có thể có nhiều metadata lưu trữ trong
wp_usermeta
.
- Mỗi người dùng có thể có nhiều metadata lưu trữ trong
- Bài viết và metadata (
wp_posts
,wp_postmeta
):- Một bài viết (post, page) trong
wp_posts
có thể có nhiều metadata trongwp_postmeta
.
- Một bài viết (post, page) trong
- Danh mục và phân loại (
wp_terms
,wp_termmeta
,wp_term_taxonomy
,wp_term_relationships
):wp_terms
lưu thông tin thuật ngữ.wp_term_taxonomy
xác định thuật ngữ đó thuộc loại phân loại nào.wp_term_relationships
liên kết bài viết với các thuật ngữ.wp_termmeta
lưu dữ liệu bổ sung cho thuật ngữ.
- Bình luận (
wp_comments
,wp_commentmeta
):- Một bình luận trong
wp_comments
có thể có metadata bổ sung trongwp_commentmeta
.
- Một bình luận trong
- Cài đặt chung (
wp_options
):- Lưu các tùy chọn toàn cầu như URL trang web, cài đặt plugin, hoặc cấu hình theme.
Lưu ý:#
- Tiền tố bảng mặc định là
wp_
, nhưng có thể được thay đổi trong quá trình cài đặt. - WordPress tự động thêm các bảng tùy chỉnh nếu bạn cài đặt plugin hoặc tạo custom post types/taxonomies.
- Hiểu rõ mối quan hệ giữa các bảng là chìa khóa để tùy chỉnh hoặc tối ưu hóa website.
Nội dung bài viết
- Cấu trúc Theme
- 1.Tệp chính cần có trong theme
- 2. Thư mục phổ biến
- 3. Các tệp tùy chọn khác
- 4. File
screenshot.png
- Giải thích:
- Cấu trúc Database
- 1. Bảng wp_posts
- 2. Bảng wp_postmeta
- 3. Bảng wp_terms
- 4. Bảng wp_termmeta
- 5. Bảng wp_term_taxonomy
- 6. Bảng wp_term_relationships
- 7. Bảng wp_users
- 8. Bảng wp_usermeta
- 9. Bảng wp_comments
- 10. Bảng wp_commentmeta
- 11. Bảng wp_options
- 12. Bảng wp_links (ít sử dụng trong phiên bản mới)
- Danh sách 12 bảng cơ sở dữ liệu WordPress với kiểu dữ liệu
- Giải thích các kiểu dữ liệu chính:
- Mối quan hệ giữa các bảng
- Lưu ý: