Template page là một file PHP trong thư mục theme, có khai báo Template Name, để WordPress nhận diện và cho phép chọn trong Dashboard.
Mặc định WordPress dùng:
page.php
Nhưng khi bạn muốn layout riêng → bạn tạo template page tùy chỉnh.

Get page và Template page trong WordPress
Cách tạo Template Page từ đầu (chuẩn production)
Bước 1: Tạo file trong theme
Ví dụ:
template-landing.php
Bước 2: Khai báo Template Name
<?php
/*
Template Name: Landing Page Chuyên Biệt
*/
get_header();
?>
<main class="landing-page">
<section class="hero">
<h1><?php the_title(); ?></h1>
</section>
<section class="content">
<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
the_content();
endwhile;
endif;
?>
</section>
</main>
<?php get_footer(); ?>
Sau khi lưu file:
- Vào Dashboard → Pages
- Edit một Page
- Chọn template “Landing Page Chuyên Biệt”
Đó là quy trình chuẩn để tạo template

Template Page không cần khai báo (theo slug)
Nếu bạn có page:
example.com/contact
Slug là: contact
Chỉ cần tạo file:
page-contact.php
WordPress sẽ tự động sử dụng file này.
Ưu điểm:
- Không cần chọn trong Dashboard
- Không phụ thuộc user
- Kiểm soát bằng code hoàn toàn
Đây là cách làm chuyên nghiệp khi build site cho client lớn.
Cấu trúc chuẩn của một Page
Một template page production-ready nên:
- Gọi
get_header() - Có The Loop
- Tách component bằng
get_template_part() - Không viết logic nặng trong file template
Ví dụ cấu trúc nâng cao:
<?php
/*
Template Name: Service Page
*/
get_header();
?>
<?php get_template_part('template-parts/section', 'hero'); ?>
<?php get_template_part('template-parts/section', 'services'); ?>
<?php get_template_part('template-parts/section', 'cta'); ?>
<?php get_footer(); ?>
Và trong template-parts/section-hero.php:
<section class="hero">
<h1><?php the_title(); ?></h1>
</section>
Tách như vậy giúp:
- Dễ maintain
- Dễ scale
- Dễ reuse component
Get Page là gì?
Trong WordPress, Page thực chất là một post type (post_type = page). Vì vậy:
get_page()(cũ)get_post()(khuyến nghị hiện tại)
đều có thể dùng để truy xuất dữ liệu Page.
Hiện nay nên dùng:
get_post()
Cách Get Page theo ID (Chuẩn nhất)
Giả sử bạn có Page “Giới thiệu” ID = 42
Và muốn hiển thị nội dung nó trong template page.
<?php
$about_page = get_post(42);
if ( $about_page ) :
?>
<section class="about-section">
<h2><?php echo $about_page->post_title; ?></h2>
<div class="content">
<?php echo apply_filters('the_content', $about_page->post_content); ?>
</div>
</section>
<?php endif; ?>
Lưu ý quan trọng:
- Luôn dùng
apply_filters('the_content', ...) - Nếu không dùng → shortcode & block Gutenberg sẽ không render
Get Page theo Slug (Chuyên nghiệp hơn)
Không nên hardcode ID.
Nên dùng:
$about_page = get_page_by_path('gioi-thieu');
Hoặc chuẩn hơn với WP_Query:
$args = array(
'post_type' => 'page',
'name' => 'gioi-thieu'
);
$query = new WP_Query($args);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
the_title('<h2>', '</h2>');
the_content();
endwhile;
wp_reset_postdata();
endif;
Cách này giúp:
✔ Không phụ thuộc ID
✔ An toàn khi migrate database
Get nhiều Page trong Template Page
Giả sử landing page cần:
- Page 1: Giới thiệu
- Page 2: Dịch vụ
- Page 3: Liên hệ
Không nên gọi:
get_post(1);
get_post(2);
get_post(3);
Thay vào đó:
$args = array(
'post_type' => 'page',
'post__in' => array(1,2,3),
'orderby' => 'post__in'
);
$query = new WP_Query($args);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
?>
<section class="dynamic-section">
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
</section>
<?php
endwhile;
wp_reset_postdata();
endif;
Cách này tối ưu hơn vì:
- Chỉ 1 query
- Kiểm soát thứ tự hiển thị
- Dễ scale
Get Page và Separation of Concerns
Template page chỉ nên hiển thị.
Logic query nên đặt trong functions.php hoặc class riêng.
Ví dụ:
function get_landing_sections() {
return new WP_Query(array(
'post_type' => 'page',
'post__in' => array(1,2,3),
'orderby' => 'post__in'
));
}
Trong template:
$sections = get_landing_sections();
if ( $sections->have_posts() ) :
while ( $sections->have_posts() ) : $sections->the_post();
the_title('<h2>','</h2>');
the_content();
endwhile;
wp_reset_postdata();
endif;
Kiến trúc này giúp:
- Template sạch
- Dễ test
- Dễ bảo trì
Template trong wordpress và SEO
Tạo page với tempate cho phép bạn:
- Thêm schema riêng
- Chèn meta tag custom
- Tối ưu heading structure
- Thiết kế layout không phụ thuộc page.php
Ví dụ thêm schema JSON-LD:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"name": "<?php the_title(); ?>"
}
</script>
Điều này rất quan trọng khi build landing page bán hàng.
Khi nào nên tạo Template riêng cho page?
Bạn nên dùng template page khi:
- ✔ Layout khác hoàn toàn page mặc định
- ✔ Trang cần cấu trúc HTML riêng
- ✔ Trang cần performance tối ưu riêng
- ✔ Trang có logic hiển thị đặc biệt
Không nên dùng template page nếu:
- ✘ Chỉ thay đổi màu sắc
- ✘ Chỉ chỉnh CSS nhẹ
Lỗi phổ biến
- Quên The Loop → nội dung không hiển thị
- Không gọi
wp_head()trong header - Query quá nhiều → làm chậm trang
- Nhồi logic vào template → phá vỡ separation of concerns
Nguyên tắc chuẩn:
Template page chỉ nên xử lý presentation.
Logic nên đặt trong functions.php hoặc class riêng.
Template nâng cao (truyền dữ liệu riêng)
Bạn có thể truyền dữ liệu tùy chỉnh:
get_template_part(
'template-parts/section',
'hero',
array(
'title' => 'Dịch vụ cao cấp',
'subtitle' => 'Giải pháp toàn diện'
)
);
Trong file section-hero.php:
<h1><?php echo $args['title']; ?></h1>
<p><?php echo $args['subtitle']; ?></p>
Cách này giúp template page linh hoạt như một mini-framework.
Kết luận
Tóm lại, template page là công cụ cốt lõi giúp bạn kiểm soát hoàn toàn layout cho từng Page trong WordPress, từ cấu trúc HTML đến chiến lược SEO và hiệu suất tải trang. Khi kết hợp đúng với kỹ thuật get page, bạn không chỉ tạo ra giao diện riêng biệt mà còn chủ động điều phối dữ liệu một cách linh hoạt, sạch kiến trúc và dễ mở rộng.
Một developer chuyên nghiệp không chỉ biết tạo file template, mà còn hiểu cách tách logic, tối ưu query và tổ chức code theo hướng bền vững cho các dự án dài hạn. Bạn có thể tham khảo về template page và post ở tài liệu gốc của wordpress để tham khảo thêm nhé
Giải đáp thắc mắc về Template Page và Get Page trong WordPress
Template Page trong WordPress là gì và dùng để làm gì?
Template Page là file PHP trong theme có khai báo ‘Template Name’, được dùng để tạo ra các bố cục (layout) riêng biệt cho từng trang thay vì dùng page.php mặc định.
Làm sao để WordPress tự nhận diện template mà không cần chọn trong Dashboard?
Bạn chỉ cần đặt tên file theo định dạng page-{slug}.php, WordPress sẽ tự động ưu tiên sử dụng file này cho trang có slug tương ứng mà không cần thao tác thủ công.
Tại sao khi lấy nội dung trang phải dùng apply_filters cho the_content?
Hàm này đảm bảo các thành phần như shortcode và blocks của Gutenberg được xử lý và hiển thị đúng định dạng thay vì chỉ hiển thị văn bản thô.
Cách lấy dữ liệu một Page theo ID hay Slug chuyên nghiệp hơn?
Lấy theo Slug (sử dụng get_page_by_path hoặc WP_Query) tốt hơn vì nó giúp code linh hoạt, không bị lỗi khi migrate dữ liệu sang website khác có ID thay đổi.
Lợi ích của việc tách component bằng get_template_part trong template là gì?
Kỹ thuật này giúp mã nguồn sạch sẽ, dễ bảo trì, tối ưu hóa quy trình làm việc và dễ dàng tái sử dụng các thành phần giao diện cho nhiều trang khác nhau.
Làm thế nào để lấy dữ liệu nhiều Page cùng lúc trong một Template Page?
Sử dụng WP_Query với mảng ‘post__in’ chứa danh sách ID hoặc slug, giúp tối ưu hiệu suất hệ thống bằng cách chỉ thực hiện một truy vấn duy nhất.
Template Page giúp tối ưu SEO cho website như thế nào?
Cho phép tùy biến cấu trúc thẻ Heading chuẩn SEO, chèn Schema JSON-LD riêng biệt cho từng dịch vụ và kiểm soát hoàn toàn mã nguồn để tăng tốc độ tải trang.
Những lỗi phổ biến nào cần tránh khi tự tạo Template Page?
Các lỗi thường gặp gồm: quên vòng lặp The Loop, thiếu hàm wp_head/wp_footer, thực hiện quá nhiều query gây chậm trang và nhồi nhét logic vào file hiển thị.