Làm thế nào để bạn tìm ra trang mẫu nào đang phục vụ trang hiện tại?


54

Khi bạn kích hoạt một chủ đề wordpress, sẽ luôn gặp rắc rối khi tìm hiểu tập tin nào sẽ thay đổi mọi thứ. Bất kỳ ý tưởng làm thế nào để đơn giản hóa mọi thứ?

Nhưng mặt khác, xem xét chức năng get_template_part, điều này có thể là không thể. bạn nói gì?


1
Tôi kiểm tra html và tìm một thẻ xác định hoặc một cái gì đó độc đáo.
Naoise Golden

1
Xem mã nguồn và tìm các lớp cơ thể cho bạn biết mẫu nào được sử dụng. Cũng cung cấp cho bạn id
Brad Dalton

Bản sao có thể có của Lấy tên của tệp mẫu hiện tại
Burgi

@BradDalton +1. Đặc biệt khi chúng tôi không được phép cài đặt plugin hoặc viết một chức năng để đạt được mục tiêu.
Subrata Sarkar

Câu trả lời:


34

Nối vào template_include, đặt toàn cục để ghi chú mẫu được đặt theo chủ đề, sau đó đọc lại giá trị đó vào chân trang hoặc tiêu đề để xem mẫu nào đang được gọi cho chế độ xem cụ thể.

Tôi đã nói về hook bộ lọc này trước đây trong Lấy tên của tệp mẫu hiện tại , nhưng hãy lấy một bản sao của mã đósao chép nó vào functions.phptệp của chủ đề của bạn .

Sau đó mở chủ đề header.phphoặc footer.php(hoặc bất cứ nơi nào bạn thích) và sử dụng một cái gì đó như sau để in ra mẫu hiện tại.

<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>

Nếu bạn muốn sử dụng điều này trên một trang web sản xuất và để thông tin đó tránh xa người dùng không phải là quản trị viên của bạn, hãy thêm một chút logic có điều kiện.

<?php 
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) ) 
    // Print the saved global 
    printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() ); 
?>

Bây giờ bạn có thể theo dõi các chế độ xem đang sử dụng mẫu nào, trong khi giữ thông tin đó cách xa khách truy cập của bạn.


1
Nếu có điều gì đó không đúng với câu trả lời này, hoặc nếu có ai có thể đưa ra nhận xét về những gì có thể được thực hiện để cải thiện câu trả lời này, hãy bình luận ở đây và chia sẻ suy nghĩ và ý tưởng của bạn về cách làm cho nó tốt hơn.
t31os

1
Nó không hoạt động, nó nói "Chức năng không xác định"
Lucas Bustamante

1
@LucasB cũng vậy, đó là lỗi tôi gặp phải
Lincoln Bergeson

Điều này nên làget_page_template
Blazemonger

40

Chà, nếu tất cả những gì bạn muốn là kiểm tra tệp mẫu nào đã được sử dụng để tạo trang hiện tại thì bạn không cần phải nhúng tay vào mã;)

Có plugin tiện dụng này được gọi là Debug Bar . Đó là một người trợ giúp tuyệt vời trong nhiều tình huống bao gồm cả bạn. Bạn chắc chắn nên kiểm tra xem - đối với tôi và nhiều người khác, đó là người bạn đồng hành cần có cho bất kỳ sự phát triển WP nào.

Tôi đã đính kèm một ảnh chụp màn hình có thể khiến bạn yêu ...

nhập mô tả hình ảnh ở đây

Để thanh Debug hoạt động , bạn cần bật wp_debugwp_savequeriestùy chọn. Các tùy chọn này ở trạng thái bị tắt theo mặc định.

Trước khi bạn thực hiện bất kỳ thay đổi nào, có một số điểm cần lưu ý:

  • Không làm điều đó trong môi trường sản xuất trừ khi trang web không phục vụ nhiều lưu lượng truy cập.
  • Khi bạn hoàn thành việc gỡ lỗi, hãy đảm bảo tắt các tùy chọn (đặc biệt là tùy chọn wp_savequeries vì ​​nó ảnh hưởng đến hiệu suất) của trang web.

Để thực hiện các thay đổi:

  1. Mở wp_config.phptệp thông qua một khách hàng ftp.
  2. Tìm kiếm wp_debugtùy chọn. Chỉnh sửa nó thành define( 'WP_DEBUG', true );. Nếu dòng không có mặt, thêm nó vào tập tin.
  3. Tương tự, chỉnh sửa hoặc thêm dòng define( 'SAVEQUERIES', true );vào tệp.
  4. Lưu lại. Bạn đã sẵn sàng để gỡ lỗi.

Thêm thông tin: Codex


2
@justCallMeBiru - plugin Debug Bar không yêu cầu WP_DEBUGSAVEQUERIESmặc dù nó được cải tiến bởi chúng.
Pat J

3
Chạy một plugin như vậy, chỉ với một chút thông tin sẽ tạo ra rất nhiều imho trên đầu, và đó là lý do tại sao tôi không đề xuất nó trong câu trả lời của riêng tôi. Điều đó nói rằng, rõ ràng mọi người thích câu trả lời này, tôi tò mò muốn biết tại sao mặc dù.
t31os

23

Tôi sử dụng chức năng tiện dụng này chỉ hiển thị mẫu hiện tại cho siêu quản trị viên:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

Mong rằng sẽ giúp. :)


2
Đây là câu trả lời goto, nên được chấp nhận.
Hybrid Web Dev

12

Thêm mã sau đây ngay sau dòng get_header trong mỗi tệp mẫu có liên quan:

<!-- <?php echo basename( __FILE__ ); ?> -->

Trong trình duyệt của bạn> xem nguồn và tên mẫu sẽ được hiển thị dưới dạng một nhận xét trong mã html của bạn, vd

<!-- page.php -->

quá nhiều nỗ lực để thêm cái này ở mọi nơi
Adal

4

Cách dễ nhất tôi đã tìm thấy là đưa chức năng WordPress vào thẻ body. Nó sẽ thêm một số lớp tùy thuộc vào trang bạn đang xem (trang chủ cho mặt trước, trang cho trang, v.v.).

Kiểm tra nó ở đây: http://codex.wordpress.org/Function_Reference/body_group

Thêm vào đó, nó hữu ích cho việc nhắm mục tiêu các yếu tố với CSS trên các trang đó.

Làm quen với Phân cấp mẫu (http://codex.wordpress.org/Template_HVELy) như David R đã đề cập cũng là một ý tưởng hay.


4

Có một plugin khác dành riêng cho mục đích này. Tôi đang nghiêng về việc cài đặt thanh gỡ lỗi, bởi vì các tính năng khác này có vẻ hữu ích, nhưng tính năng này cơ bản hơn và đặc biệt cho mục đích này: http://wordpress.org/extend/plugins/what-the-file/


3

Một điều rất đơn giản tôi làm là chèn một nhận xét HTML xác định tệp mẫu trong mỗi tệp có liên quan của chủ đề, ví dụ: ở đầu tệp index.php tôi có

<!-- index -->

và ở đầu trang nhất.php

<!-- front -->

Nhưng rõ ràng điều đó đòi hỏi phải sửa đổi chủ đề. Tôi nghi ngờ bạn có thể thêm một chức năng tùy chỉnh trong tệp footer.php hoặc header.php sẽ cho bạn biết tập tin nào đang được sử dụng. Phương pháp trên và biểu đồ tham chiếu http://codex.wordpress.org/Template_HVELy là những gì tôi có xu hướng sử dụng.


3

Có một plugin có tên Theme Check thực hiện chính xác điều này. Nó hiển thị tên của tệp mẫu hiện tại được sử dụng làm nhận xét HTML.


3

Ở đây bạn đi:

Danh sách HTML có tất cả các tệp mẫu được sử dụng cho trang đích hiện tại, bao gồm tất cả các phần mẫu từ plugin, chủ đề con và / hoặc kết hợp chủ đề gốc , tất cả trong một dòng mã:

echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';

Bạn có thể cần kiểm tra xem máy chủ của bạn không trả lại dấu gạch chéo ở bất kỳ đường dẫn nào . Hãy nhớ đặt nó sau khi tất cả các tệp mẫu thực sự được sử dụng, như trong footer.php, nhưng trước khi thanh quản trị kết xuất lại .

nếu admin-bar stuffđường dẫn hiển thị ở trên cùng hoặc bất kỳ tệp nào khác, hãy thay đổi tên tệp template-loader.phptrong dòng mã này thành: bất kỳ tên tệp nào bạn cần ngắt. Thường:class-wp-admin-bar.php

nếu bạn cần điều này trong thanh quản trị, hãy sử dụng quyền ưu tiên (sớm nhất) để làm cho shure không có tệp nào được nhập vào cuối danh sách này. Ví dụ:

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

ưu tiên -5làm cho shure nó tải đầu tiên. Điều quan trọng là gọi get_included_files()đúng lúc, nếu không thì cần một số mảng!

Để phá vỡ điều này:

Bạn không thể thu thập tất cả các tệp mẫu được bao gồm mà không có nền tảng PHP. Superglobals bên trong template_include sẽ không thu thập tất cả . Một cách khác là "đặt một điểm đánh dấu" vào mỗi tệp mẫu, nhưng nếu bạn cần tương tác với các tệp trước, bạn sẽ lúng túng với thời gian và toàn bộ ý tưởng.

1) Chúng tôi cần kiểm tra bên trong tất cả các tệp đã được sử dụng bởi yêu cầu Wordpress hiện tại. Và họ rất nhiều! Đừng ngạc nhiên nếu bạn đang sử dụng 300 tệp trước cả khi tệp.php của bạn được đăng ký.

$included_files = str_replace('\\', '/', get_included_files());

Chúng tôi đang sử dụng get_included_files () gốc của PHP, chuyển đổi dấu gạch chéo ngược thành dấu gạch chéo để khớp với hầu hết các đường dẫn trả về của Wordpress.

2) Chúng tôi đang cắt mảng đó từ nơi mẫu-loader.php được đăng ký. Sau đó, get_included_files () được điền chỉ nên có các tệp mẫu được điền.

/* The magic point, we need to find its position in the array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);

3) Rút ngắn kết quả, chúng tôi không cần đường dẫn cho đến khi thư mục chủ đề hoặc thư mục plugin, như các mẫu đang sử dụng, có thể được trộn lẫn từ các plugin, chủ đề hoặc thư mục chủ đề con.

$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);

4) Cuối cùng, chuyển đổi từ mảng sang danh sách HTML đẹp

$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';

Một sửa đổi cuối cùng có thể cần thiết trong phần 3) thay thế , nếu bạn không muốn bao gồm các plugin. Họ có thể gọi class-filestrễ và "chặn" trong quá trình xử lý đầu ra mẫu.

Tuy nhiên, tôi thấy hợp lý khi để chúng hiển thị, vì ý tưởng là theo dõi những gì đã được tải , ngay cả khi đó không phải là "mẫu" hiển thị đầu ra trong giai đoạn này.

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.