Gọi file PHP trong WordPress

Điểm bài viết
[Tổng cộng: 0 Trung bình: 0]

Share vì hữu ích

Có 4 cách để bạn gọi 1 file PHP, và trong WordPress, chúng ta sẽ cùng tìm hiểu các cách phù hợp với những hoàn cảnh nào nhé.

Thêm file trong PHP

Về cơ bản, đây là việc bạn gọi 1 đoạn mã khác vào trong file bạn đang làm việc.

Hàm include() sẽ gọi 1 file PHP. Nếu không tìm thấy, sẽ có lỗi PHP warning.

Hàm include_once() cũng tương, nhưng sẽ chỉ gọi file cần thêm vào 1 lần.

Thêm file bắt buộc trong PHP

Cũng tương tự như thêm file ở trên, nhưng quá trình hoạt động sẽ bị gián đoạn và hiển thị lỗi khác nhau.

require() hoạt động tương tự include(), nhưng một khi file không tìm thấy, bạn sẽ thấy script break từ đó (và không chạy các thành phần tiếp theo).

require_once() cũng tương tự include_once(), tức là nếu đã call file đó một lần thì không thể call lần thứ 2.

Điểm khác biệt (phần này lược dịch nên có thể không chính xác)

require_once() tốt hơn cho các site lớn vì nó làm việc mà không ảnh hưởng quá nhiều tới bảo mật và hiệu năng.
include_once() nhanh và dễ chấp nhận với các site nhỏ hơn.

Gọi file trong WordPress

Trong WordPress, ngoài những phương án mặc nhiên gọi file PHP như trên, ta còn có thể sử dụng các cách khác:

get_template_part() là một phần API của WordPress, có thể sử dụng để gọi section/template hoặc một phần code vào trong theme.

Function này chấp nhận 2 đối:
– Đối đầu tiên là slug của template.
– Đối thứ hai là tên của template.

Về cơ bản function này khá thú vị nếu các thành phần bạn cần gọi vào là độc lập, tức là các giá trị và define biến của chúng được gọi bên trong, hoặc gọi từ header.

Luyện tập sử dụng

Ta hãy thử các phương án:

1. Ta có 1 template tên home.php nằm trong thư mục /templates/

2. Ta có 1 template social.php nằm trong thư mục /template-parts/footer/

Các cách gọi bằng get_template_part() của bạn sẽ như thế nào?

load_template() là function của WordPress, nhưng thực ra không khác gì bạn gọi require(). Tuy nhiên, bạn đừng quên path của function này bao gồm cả file extension, tức là .php nhé.

Ví dụ:

locate_template($template_names, $load);

locate_template() là phương án không tệ, vì nó check file có tồn tại hay không trước khi bạn có thể (không bắt buộc) include file này.

Sử dụng:

locate_template($template_names, $load);

$load có thể nhận giá trị true nếu bạn muốn include các file template đã check tồn tại.

Bạn thậm chí có thể check 3 templates cùng 1 lúc như thế này:

locate_template(array(
    'download.php',
    'custom-download.php',
    'mytheme-download.php'
), true);

get_query_template() gọi main template (template nằm ngoài cùng) sẽ rất hiệu quả, chẳng hạn như các template sau:

– index
– 404
– archive
– author
– category
– tag
– taxonomy
– date
– home
– front_page
– page
– paged
– search
– single
– attachment
– comments_popup

Ví dụ:

include(get_query_template('404'));

Truyền dữ liệu

Giờ ta sẽ chuyển qua phần khó hơn. Giả sử bạn có 1 module tên là Newsletter, nó được đặt trong thư mục template-parts và có tên là newsletter.php.

Tuy nhiên, module này có giao diện chỉ khác nhau đôi chút và được sử dụng trên 3 mục khác nhau: trên page, trên single post và trên sidebar.

Chúng ta có 1 bài toán phức tạp hơn về reusable code. Làm thế nào 1 newsletter block có thể đáp ứng cả 3 vị trí trên hoàn hảo nhất?

Và phương án tốt nhất…

Thật ra tình huống này nên được xử lý như sau để code tốt nhất:

Trước khi bạn include template, bạn cần define biến cho mỗi trường hợp.

Chẳng hạn:

Trong file page.php

$newsletter_header = 'Sign Up For Bonus';

Trong file single.php

$newsletter_header = 'Have a discount?';

Trong file sidebar.php

$newsletter_header = 'Newsletter Signup';

Như bạn nhìn thấy, $newsletter_header trong các page khác nhau sẽ được định nghĩa khác nhau rồi đúng không. Vậy làm sao để biến này được truyền thành công vào file newsletter.php?

Nếu bạn sử dụng get_template_part(), biến sẽ không được truyền đâu. Vì vậy, hãy sử dụng require(TEMPLATEPATH . '/template-parts/newsletter.php');. Few, có magic chưa nhỉ?

Thú vị phải không?

Share vì hữu ích

About Khôi 'Pro' Nguyễn

Technical Lead tại Solis Lab. Quản lý ngôn ngữ tại vi.wordpress.org.

View all posts by Khôi 'Pro' Nguyễn →

One Comment on “Gọi file PHP trong WordPress”

Trả lời