Is_page_template () so sánh với cái gì?


10

Nhìn qua tài liệu Wordpress , nó nói rằng is_page_template()so sánh với "tên mẫu", nếu được cung cấp.

Tôi có một mẫu được lưu trữ trong page-homepage.phpđược gọi là Homepage:

/*
 * Template Name: Homepage
 * Description: The template for displaying the homepage
 */

Và tôi có một số mã tôi muốn chạy trong hàm.php của mình khi tôi đang sử dụng mẫu đó:

if (is_page_template('Homepage')) { 
   ...

Nhưng nó không được kích hoạt khi tôi ở trên một trang sử dụng mẫu đó.

Khi tôi nhìn vào mã mà Wordpress thực thi is_page_template(), có vẻ như nó thực sự kiểm tra tên tài liệu, không phải tên mẫu ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

    if ( $template == $page_template )
        return true;

Trong trường hợp của tôi có vẻ như $page_templatepage-homepage.php- không phải là tên mẫu, như các tài liệu cho thấy ...?

Tôi có làm điều gì sai?


Quan sát tốt về các tài liệu.
bạch dương

Câu trả lời:


15

Điều kiện của bạn nên được viết như thế này:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

Tôi tin rằng sự nhầm lẫn là kết quả của hai điều:

  1. Các tài liệu đề cập đến "tên" một cách mơ hồ. Chỉ định "tên tệp" sẽ làm cho tài liệu rõ ràng hơn nhiều.
  2. Mã phía sau is_page_template()cho thấy get_page_template_slug()chức năng ở cốt lõi của nó. Hàm này thực sự trả về một tên tệp chứ không phải sên mẫu. https://codex.wordpress.org/Function_Reference/get_page_template_slug

Khi chỉ định một đối số cho is_page_template()hàm (như trong ví dụ trên), đường dẫn tệp có liên quan đến gốc chủ đề.

Chức năng này sẽ không hoạt động bên trong vòng lặp.


2
Sẽ thật tốt khi có một lời giải thích những gì con đường đại diện cho ở đây.
bạch dương

1
Đã thêm làm rõ thêm và chi tiết về lý do tại sao điều này có thể gây nhầm lẫn.
jdm2112

3
Ồ Một gấp đôi của sự nhầm lẫn. Tôi có thể hiểu các tài liệu hơi mơ hồ (mặc dù nó thực sự cần được sửa), nhưng tôi thực sự ngạc nhiên khi get_page_template_slug()không thực sự trả lại một con sên!
Django Reinhardt

Đã đồng ý. Cho vay thêm hỗ trợ cho khái niệm rằng "đặt tên các thứ" là một trong những điều khó nhất khi viết mã.
jdm2112

Câu trả lời này chứa giải pháp "thực hành tốt nhất". Tuy nhiên, nếu trang của bạn đang sử dụng "mẫu mặc định" (nhưng thực tế nó là Mẫu trang), câu trả lời này có thể khiến bạn quan tâm.
rinogo

7

Tôi nghĩ điều tốt nhất để nói là, nó kiểm tra tên TẬP_TIN và trong trường hợp của bạn, nó sẽ là trang-page.php. vì thế:

if (is_page_template('page-homepage.php')) { 
  ...

Những điều khác cần nghĩ đến là nếu tệp mẫu thực sự được lưu trữ trong một thư mục khác bên trong chủ đề. đọc thêm

Một điều nữa, đó Template Name: Homepagelà những gì được sử dụng để xác định mẫu khi tạo trang hoặc bài đăng.


Như một câu trả lời khác chỉ ra - nó cũng đưa con đường vào xem xét. page-templates/page-homepage.phpkhác với mẫu trong thư mục gốc.
Howdy_McGee

Thú vị và một cái gì đó tôi không biết, chỉ để xác nhận, tôi có thể lưu trữ các mẫu trang bên ngoài thư mục chủ đề hoặc chủ đề con?
Malisa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.