Trong WordPress, get_template_part() là một hàm hữu ích dùng để gọi và chèn nội dung files khác vào giao diện. Bạn có thể sử dụng get_template_part trong bất kỳ template hay plugins nào vì đây là hàm nằm trong lõi của WordPress. Bài viết này sẽ hướng dẫn cách sử dụng cùng với các ví dụ cụ thể để bạn dễ hiểu hơn về hàm này. Đồng thời cũng giải thích tại sao get_template_part lại quan trọng đối với việc phát triển Theme WordPress.
Table of Contents
Get_template_part là gì trong WordPress?
get_template_part() là một hàm của WordPress dùng để chèn (include) nội dung ở các file khác vào giao diện hoặc vào file bạn đang thiết kế. Nó hoạt động khá giống với hàm include() của PHP. Trong WordPress, giao diện (Template) có thể được chia thành các Part nhỏ. Hàm get_template_part() có tác dụng load các template part của WordPress vào một template hoàn chỉnh.
Điều này giúp cho các nhà phát triển có thể dễ dàng gom và nhóm các block của giao diện vào một file rồi dùng get_template_part để chèn bất cứ khi nào cần.
function get_post_meta( $post_id, $key = '', $single = false ) { return get_metadata( 'post', $post_id, $key, $single ); }
Hãy lấy một ví dụ về vòng lặp trong tệp index.php, sử dụng get_template_part():
/* Đây là một phần file index.php trong theme wordpress */ if ( have_posts() ) : while ( have_posts() ) : the_post(); get_template_part( 'content' ); endwhile; endif;
Và đây là file content.php
mẫu của chúng ta:
/* Đây là một phần file index.php trong theme wordpress */ <article id ="post-<? php the_ID ();?>" <?php post_class (); ?>> <h2 class = "entry-title"> <a href="<?php the_permalink(); ?>"> <?php the_title (); ?> </a> </h2> <? php the_excerpt (); ?> </article>
Trong ví dụ này, WordPress sẽ chạy file index.php
bao gồm cả nội dung của content.php ở bên trong nó. Bạn có thể tưởng tượng việc WordPress tải hoàn toàn nội dung của content.php
khi nó chạy hàm get_template_part(). Điều này cho phép chúng ta tránh phải viết lại tất cả cùng một đoạn code ở nhiều tệp khác nhau trong giao diện WordPress.
Vậy tại sao lại phải chia một tệp này thành hai tệp khác nhau thế? Đơn giản là vì khi chia ra thì cả index.php và content.php đều nhỏ gọn và dễ đọc.
Hai tệp hiện có các trách nhiệm khác nhau: index.php chứa hầu hết là logic và content.php chứa hầu hết là mã tạo mẫu HTML / PHP trình bày.
Ưu điểm chính: Đoạn code trong content.php có thể được sử dụng lại bởi các tệp mẫu khác, như home.php, đơn giản bằng cách các tệp đó cũng gọi get_template_part(‘content’). Điều này làm giảm tính cồng kềnh tổng thể của giao diện. Thêm một điều nữa là nó dễ tùy biến. Ví dụ, nếu bạn muốn thay đổi điều gì đó ở content.php, bạn chỉ thay đổi nó một lần và các thay đổi sẽ phổ biến ở mọi nơi.
Cách sử dụng hàm get_template_part()
Thông thường hàm get_template_part() được sử dụng với 3 tham số truyền vào.
get_template_part( $slug, $name, $args );
Trong đó:
$slug: là tham số thứ nhất, biểu thị cho đường dẫn.
$name: Là tham số thứ hai, biểu thị cho tên nếu có
$args: Là tham số thứ ba, biểu thị cho các giá trị quyền vào cho tệp được gọi.
Khi hàm get template part được thực thi mà không có tham số nào được truyền vào thì nó sẽ tự động xác định là không thực thi.
Lưu ý: Hàm get_template_part() được thực thi sử dụng hàm require của PHP, chứ không phải require_once. Do đó bạn có thể thoải mái gọi get_template_part bao nhiêu lần trong 1 tệp tin đều được.
Sử dụng get_template_part với 1 tham số:
Khi sử dụng get_template_part với duy nhất 1 tham số thì nó hiểu đó là tham số thứ nhất $slug.
Ví dụ:
<?php get_template_part ('noidung'); ?>
Thì nó sẽ lấy nội dung của file noidung.php
<?php get_template_part ('quocgia/vietnam'); ?>
Thì nó sẽ lấy nội dung của file vietnam.php
nằm trong thư mục quocgia (quocgia/vietnam.php
)
Sử dụng get_template_part() với 2 tham số:
Ví dụ cách sử dụng hàm get_template_part():
<?php get_template_part ('dautien', 'thuhai'); ?>
Lệnh này sẽ chèn nội dung của file dautien-thuhai.php
trong cùng thư mục với thư mục chứa nó.
Ví dụ thứ 2: Trong giao diện WordPress của huyhoa.net có cấu trúc như sau: index.php, content-dulich.php, content-web.php, content-meovat.php, header.php, footer.php
Như vậy, rõ ràng trong file index.php (đây là ví dụ đơn giản để các bạn dễ hiểu)
<?php get_header(); ?> <?php if ( have_posts() ) { $i = 0; while ( have_posts() ) { $i++; the_post(); get_template_part( 'content', get_post_type() ); } } ?> <?php get_footer(); ?>
Như vậy, khi xem mục du lịch nó sẽ gọi nội dung của content-dulich.php, tương tự như xem mẹo vặt nó sẽ gọi nội dung của content-meovat.php
Khi có 2 tham số truyền vào thì get_template_part sẽ gọi file tương ứng. Lưu ý khi đặt tên file đó thì đối số thứ nhất và đối số thứ 2 được phân cách bằng dấu gạch ngang (-).
Ví dụ tên file đúng để get_template_part có thể gọi là doisothunhat-doisothu2.php
Các tên file không được có dấu, phải là chữ latin và như đã nói, PHẢI PHÂN CÁCH bằng dấu gạch ngang.
Trong trường hợp truyền 2 đối số mà nó tìm không thấy thì nó sẽ lấy đối số thứ nhất.
Nếu có giao diện mẹ, giao diện con thì nó sẽ ưu tiên tìm trong giao diện con trước. Sau đó mới đến giao diện cha mẹ.
Có thể bạn quan tâm:
Lấy một ví dụ để các bạn dễ hiểu cách hoạt động của get_template_part trong giao diện mẹ con nhé.
Ta có thư mục giao diện như sau (huyhoa là giao diện cha mẹ, huyhoa-child là giao diện con):
huyhoa/index.php, huyhoa/content-dulich.php, huyhoa/content.php
huyhoa-child/index.php, huyhoa-child/content-dulich.php, huyhoa-child/content.php
get_template_part( 'content', 'dulich' );
Dựa trên đoạn mã này, WordPress sẽ tìm kiếm các tệp sau, theo thứ tự:
Trong chủ đề con (huyhoa-child): content-dulich.php
Trong chủ đề mẹ (huyhoa): content-dulich.php
Trong chủ đề con (huyhoa-child): content.php
Trong chủ đề mẹ (huyhoa): content.php
Với get_template_part, việc chuyển các biến cho đối số thứ hai cũng khá phổ biến. Việc chuyển các biến đến get_template_part rất hữu ích vì nó cho phép chúng ta lưu trữ những thứ (như định dạng bài đăng WordPress) dưới dạng một biến và sau đó được chuyển vào hàm.
Hoặc chúng ta có thể đơn giản có những gì có thể là một biến khai báo đứng như một hàm gọi nội tuyến, như dòng này từ giao diện mặc định twentytwenty:
get_template_part('template-part/post/content', get_post_format ());
WordPress Child Themes: Tại sao get_template_part() lại tốt hơn PHP include() hoặc require()
Nếu bạn biết là một lập trình viên PHP, bạn có thể tự hỏi: Tại sao không sử dụng các hàm include() hoặc require() của PHP? Chúng đều có chức năng chèn nội dung thực thi của file cần chèn mà. Tuy nhiên, nếu xét kỹ hơn, chúng ta sẽ thấy những nhược điểm mà PHP include() hoặc require() không làm được như get_template_part.
Đầu tiên, các hàm PHP mặc định không có cấu trúc “hai đối số dự phòng” của get_template_part(), như đã trình bày ở trên. Điều này có nghĩa là khi chèn một tệp bất kỳ, sẽ không có biện pháp dự phòng nào cả, nếu không tồn tại tệp tin đó, nó sẽ nhảy luôn ra lỗi. Điều đó thật tệ đúng không?
Lý do thứ hai và quan trọng hơn là Child Themes. Đa số việc chỉnh sửa giao diện được khuyến cáo nên làm trên Child Themes để khi update themes thì không bị ảnh hưởng nhiều. Thử tưởng tượng nếu copy một file bất kỳ ở giao diện gốc sang giao diện con. Tất nhiên ta không cần copy hết toàn bộ file ở giao diện gốc sang giao diện con rồi.
Ví dụ content.php sang giao diện con nhé. Nếu dùng include hay require để chèn nội dung của file template-part/meta-header
chẳng hạn, khi trong giao diện con không có sẽ báo lỗi ngay đúng khôgn. Nhưng nếu dùng get_template_part mà giao diện con không có nó sẽ fallback về giao diện cha mẹ để tìm và sẽ không gây lỗi.
Nếu bạn đang phát triển giao diện wordpress của riêng mình, bạn nên luôn sử dụng get_template_part() nếu có thể. Get template part của WordPress là hàm cực kỳ mạnh mẽ và có giá trị để xây dựng và phát triển Theme WordPress. Bạn sẽ thấy nó xuất hiện trong hầu như toàn bộ các giao diện mà bạn cố gắng chỉnh sửa.
Hy vọng với những thông tin bên trên đã đủ để các bạn hiểu về cách hoạt động cũng như cách sử dụng của hàm get_template_part().
Nếu muốn tìm hiểu thêm về hàm này, các bạn có thể tham khảo trên trang WordPress dành cho Developer tại đây