Bagaimana Anda mengetahui halaman templat mana yang melayani halaman saat ini?

54

Ketika Anda mengaktifkan tema wordpress, selalu merepotkan untuk mencari tahu file mana yang harus diubah. Adakah yang tahu bagaimana menyederhanakan banyak hal?

Tetapi di sisi lain, mengingat fungsi get_template_part, ini mungkin tidak mungkin. Apa yang kamu katakan?

Joe biasa-biasa saja
sumber
1
Saya memeriksa html dan menemukan tag yang diidentifikasi atau sesuatu yang unik.
Naoise Golden
1
Lihat kode sumber dan cari kelas tubuh yang memberi tahu Anda templat mana yang digunakan. Juga memberi Anda id
Brad Dalton
Kemungkinan rangkap dari Dapatkan nama file templat saat ini
Burgi
@BradDalton +1. Khususnya ketika kita tidak diizinkan menginstal plugin atau menulis fungsi untuk mencapai tujuan.
Subrata Sarkar

Jawaban:

34

Kaitkan ke template_include, atur global untuk mencatat templat yang ditetapkan oleh tema lalu baca nilai itu kembali ke footer atau header untuk melihat templat mana yang dipanggil untuk tampilan yang diberikan.

Saya berbicara tentang hook filter ini sebelumnya di Dapatkan nama file template saat ini , tetapi ambil salinan kode itu dan plonk itu functions.phpfile tema Anda .

Kemudian buka tema header.phpatau footer.php(atau di mana pun Anda suka) dan gunakan sesuatu seperti berikut untuk mencetak template saat ini.

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

Jika Anda ingin menggunakan ini di situs produksi dan menjaga info itu dari pengguna non-administrator Anda, tambahkan sedikit logika kondisional.

<?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() ); 
?>

Sekarang Anda dapat melacak pandangan apa yang menggunakan templat apa, sambil menjaga info itu dari pengunjung Anda.

t31os
sumber
1
Jika ada yang salah dengan jawaban ini, atau jika ada yang bisa memberikan komentar tentang apa yang dapat dilakukan untuk meningkatkan jawaban ini, miliki di sana, letakkan komentar di sini dan bagikan pemikiran dan ide Anda tentang bagaimana menjadikannya lebih baik.
t31os
1
Itu tidak berfungsi, katanya, "Fungsi tidak terdefinisi"
Lucas Bustamante
1
@LucasB sama di sini, itu kesalahan saya
Lincoln Bergeson
Ini seharusnyaget_page_template
Blazemonger
40

Nah, jika semua yang Anda inginkan adalah memeriksa file templat mana yang telah digunakan untuk menghasilkan halaman saat ini maka Anda tidak perlu mengotori kode;)

Ada plugin yang berguna ini disebut Debug Bar . Ini penolong yang hebat dalam banyak situasi termasuk situasi Anda. Anda pasti harus memeriksanya - bagi saya dan banyak lainnya itu adalah pendamping yang harus dimiliki untuk setiap pengembangan WP.

Saya telah memasang tangkapan layar yang bisa membuat Anda jatuh cinta ...

masukkan deskripsi gambar di sini

Agar Debug Bar berfungsi , Anda harus mengaktifkan wp_debugdan wp_savequeriesopsi. Opsi-opsi ini dalam keadaan dinonaktifkan secara default.

Namun, sebelum Anda melakukan perubahan, ada beberapa hal yang perlu diingat:

  • Jangan lakukan itu di lingkungan produksi kecuali situs web tidak melayani banyak lalu lintas.
  • Setelah Anda selesai debugging, pastikan untuk menonaktifkan opsi (terutama opsi wp_savequeries karena mempengaruhi kinerja) dari situs web.

Untuk melakukan perubahan:

  1. Buka wp_config.phpfile melalui klien ftp.
  2. Cari wp_debugopsi. Edit ke define( 'WP_DEBUG', true );. Jika garis tidak ada, tambahkan ke file.
  3. Demikian pula, edit atau tambahkan baris define( 'SAVEQUERIES', true );ke file.
  4. Menyimpan. Anda siap melakukan debug.

Info lebih lanjut: Codex

Michal Mau
sumber
2
@justCallMeBiru - plugin Debug Bar tidak memerlukan WP_DEBUG dan SAVEQUERIES, meskipun ditingkatkan oleh mereka.
Pat J
3
Menjalankan plugin semacam itu, hanya untuk sedikit informasi membuat banyak overhead imho, dan karena itu saya tidak menyarankan itu dalam jawaban saya sendiri. Yang mengatakan, jelas orang lebih suka jawaban ini, saya ingin tahu kenapa.
t31os
23

Saya menggunakan fungsi praktis ini yang menampilkan templat saat ini hanya untuk admin super:

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

Semoga itu bisa membantu. :)

mungkinypixel
sumber
2
Ini jawaban goto, harus diterima.
Web Hibrid
12

Tambahkan kode berikut tepat setelah baris get_header di setiap file templat yang relevan:

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

Di browser Anda> lihat sumber, dan nama templat akan ditampilkan sebagai komentar dalam kode html Anda, mis

<!-- page.php -->
Ronald
sumber
terlalu banyak upaya untuk menambahkan ini di mana
Adal
4

Cara termudah yang saya temukan adalah memasukkan fungsi WordPress pada tag tubuh. Ini akan menambahkan beberapa kelas tergantung pada halaman yang Anda lihat (beranda untuk depan, halaman untuk halaman, dll).

Lihat di sini: http://codex.wordpress.org/Function_Reference/body_class

Plus, sangat membantu untuk menargetkan elemen dengan CSS di halaman tersebut.

Mengenal Templat Hierarki (http://codex.wordpress.org/Template_Hierarchy) seperti yang disebutkan David R juga merupakan ide yang bagus.

CookiesForDevo
sumber
4

Ada lagi plugin bare-tulang khusus untuk tujuan ini. Saya condong ke arah menginstal bilah debug, karena fitur-fitur lain terlihat berguna, tetapi yang ini lebih mendasar dan khusus untuk tujuan ini: http://wordpress.org/extend/plugins/what-the-file/

Julian K
sumber
3

Satu hal yang sangat sederhana yang saya lakukan adalah memasukkan komentar HTML yang mengidentifikasi file template di setiap file yang relevan dengan tema, misalnya di bagian atas index.php yang saya miliki

<!-- index -->

dan di bagian atas halaman-depan.php

<!-- front -->

Namun jelas itu membutuhkan modifikasi tema. Saya menduga Anda dapat menambahkan fungsi kustom di file footer.php atau header.php yang akan memberi tahu Anda file apa yang sedang digunakan. Metode di atas dan grafik referensi http://codex.wordpress.org/Template_Hierarchy adalah apa yang saya cenderung gunakan.


sumber
3

Ada plugin bernama Theme Check yang melakukan hal ini. Ini menampilkan nama file template saat ini yang digunakan sebagai komentar HTML.

navjotjsingh
sumber
3

Ini dia:

Daftar HTML dengan semua file templat yang digunakan untuk halaman arahan saat ini, termasuk semua templat-bagian dari plugin, tema anak dan / atau kombinasi tema induk , semuanya dalam satu baris kode:

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>';

Anda MUNGKIN perlu memeriksa bahwa server Anda tidak mengembalikan garis miring dubble di jalur apa pun . Ingatlah untuk menempatkan ini setelah semua file template benar-benar digunakan, seperti di footer.php, tetapi sebelum admin bar merender .

jika admin-bar stuffpath ditampilkan di bagian atas, atau file lain, ubah nama file template-loader.phppada baris kode ini menjadi: apa pun nama file yang harus Anda hentikan. Sering:class-wp-admin-bar.php

jika Anda memerlukan ini di bilah admin, gunakan priotity yang tepat (paling awal) untuk membuat shure tidak ada file yang dimasukkan pada akhir daftar ini. Sebagai contoh:

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

prioritas -5membuat shure itu dimuat terlebih dahulu. Kuncinya adalah memanggil get_included_files()pada saat yang tepat, jika tidak diperlukan beberapa array-popping!

Untuk memecah ini:

Anda tidak dapat mengumpulkan semua file template yang disertakan tanpa PHP backtrace. Superglobals di dalamnya template_include tidak akan mengumpulkan semuanya . Cara lain adalah dengan "menempatkan penanda" di setiap file template, tetapi jika Anda perlu berinteraksi dengan file terlebih dahulu, Anda hazzle dengan waktu dan seluruh ide.

1) Kita perlu memeriksa di dalam semua file yang telah digunakan oleh permintaan Wordpress saat ini. Dan mereka banyak! Jangan kaget jika Anda menggunakan 300 file bahkan sebelum functions.php Anda terdaftar.

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

Kami menggunakan get_included_files () PHP asli, mengonversi backslash untuk meneruskan garis miring untuk mencocokkan sebagian besar jalur pengembalian Wordpress.

2) Kami memotong array dari tempat templat-loader.php terdaftar. Setelah itu, get_included_files () yang terisi hanya akan memiliki file template yang terisi.

/* 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) Persingkat hasilnya, kita tidak perlu path sampai folder tema atau folder plugin, sebagai template yang digunakan, dapat dicampur dari plugins, tema atau folder tema anak.

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

4) Akhirnya, konversikan dari array ke daftar HTML yang bagus

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

Modifikasi terakhir mungkin diperlukan di part3) -pengganti , jika Anda tidak ingin menyertakan oleh plugin. Mereka mungkin menelepon class-filesterlambat, dan "mencegat" selama pemrosesan output template.

Namun, saya merasa masuk akal untuk membiarkan mereka terlihat, karena idenya adalah untuk melacak apa yang telah dimuat , bahkan jika itu bukan "template" yang memberikan output pada tahap ini.

Jonas Lundman
sumber