Cum aflați ce fișier template servește pagina curentă?

24 dec. 2011, 22:32:48
Vizualizări: 144K
Voturi: 70

Când activați o temă WordPress, este întotdeauna dificil să găsiți fișierul potrivit pentru a face modificări. Aveți vreo idee cum să simplificați lucrurile?

Pe de altă parte, având în vedere funcționalitatea get_template_part, acest lucru ar putea fi imposibil. Ce părere aveți?

4
Comentarii

Inspectez codul HTML și găsesc o etichetă identificată sau ceva unic.

Naoise Golden Naoise Golden
27 dec. 2011 20:38:48

Vizualizează codul sursă și caută clasele din body care îți spun ce șablon este folosit. De asemenea, îți oferă ID-ul.

Brad Dalton Brad Dalton
4 feb. 2014 23:33:05

Posibil duplicat al Obține numele fișierului șablon curent

Burgi Burgi
13 iun. 2017 12:56:15

@BradDalton +1. Mai ales când nu avem voie să instalăm un plugin sau să scriem o funcție pentru a atinge scopul.

Subrata Sarkar Subrata Sarkar
13 iul. 2018 09:57:57
Toate răspunsurile la întrebare 8
7
44

Conectează-te la template_include, setează o variabilă globală pentru a nota șablonul setat de temă, apoi citește acea valoare în subsol sau antet pentru a vedea ce șablon este apelat pentru o anumită vizualizare.

Am vorbit despre acest filtru înainte în Obține numele fișierului șablon curent, dar ia o copie a acelui cod și pune-l în fișierul functions.php al temei tale.

Apoi deschide fișierul header.php sau footer.php al temei (sau oriunde dorești) și folosește ceva similar cu următoarele pentru a afișa șablonul curent.

<div><strong>Șablon curent:</strong> <?php get_current_template( true ); ?></div>

Dacă dorești să folosești acest lucru pe un site de producție și să păstrezi această informație departe de utilizatorii care nu sunt administratori, adaugă o logică condițională.

<?php 
// Dacă utilizatorul curent poate gestiona opțiuni (adică este un administrator)
if( current_user_can( 'manage_options' ) ) 
    // Afișează variabila globală salvată 
    printf( '<div><strong>Șablon curent:</strong> %s</div>', get_current_template() ); 
?>

Acum poți ține evidența ce vizualizări folosesc ce șablon, păstrând în același timp această informație departe de vizitatorii tăi.

26 dec. 2011 14:57:16
Comentarii

Dacă ceva nu este în regulă cu acest răspuns, sau dacă cineva poate oferi comentarii privind ce ar putea fi făcut pentru a îmbunătăți acest răspuns, nu ezitați, lăsați un comentariu aici și împărtășiți-vă gândurile și ideile despre cum l-am putea îmbunătăți.

t31os t31os
28 ian. 2014 18:03:46

Nu a funcționat, frate, apare eroarea "Funcție nedefinită"

Lucas Bustamante Lucas Bustamante
27 apr. 2016 18:48:47

@LucasB la fel și la mine, asta e eroarea pe care am primit-o

Lincoln Bergeson Lincoln Bergeson
7 ian. 2017 02:21:02

Aceasta ar trebui să fie get_page_template

Blazemonger Blazemonger
11 aug. 2017 23:57:36

get_current_template nu este o funcție și get_page_template nu afișează nimic pentru mine (o pagină woocommerce).

run_the_race run_the_race
27 iun. 2020 12:59:42

@run_the_race - ar trebui să copiezi funcția de aici: https://wordpress.stackexchange.com/questions/10537/get-name-of-the-current-template-file/10565#10565 și să o lipești în functions.php

mark-in-motion mark-in-motion
5 mai 2021 12:12:03

Pentru cei care sunt prea leneși să citească cu adevărat, get_current_template este o funcție PERSONALIZATĂ pe care @t31os propune să o folosiți, urmați linkurile lui pentru a vedea cum se face. get_page_template este inutilă, este bună doar pentru paginile reale, citiți documentația WP pentru clarificări. Din câte știu, soluția propusă aici este singura modalitate holistică de a detecta șablonul curent, în toate cazurile.

User User
19 aug. 2021 13:44:02
Arată celelalte 2 comentarii
2
44

Ei bine, dacă tot ce dorești este să verifici ce fișier de template a fost folosit pentru a genera pagina curentă, atunci nu este nevoie să te murdărești mâinile cu cod ;)

Există un plugin util numit Debug Bar. Este un instrument excelent în multe situații, inclusiv în cazul tău. Ar trebui să îl încerci cu siguranță - pentru mine și mulți alții, este un companion obligatoriu pentru orice dezvoltare WP.

Am atașat o captură de ecran care te poate face să te îndrăgostești...

Descriere imagine

Pentru a face Debug Bar funcțional, trebuie să activezi opțiunile wp_debug și wp_savequeries. Aceste opțiuni sunt dezactivate în mod implicit.

Înainte de a face orice modificări, trebuie să ții cont de câteva aspecte:

  • Nu face asta într-un mediu de producție, cu excepția cazului în care site-ul nu deservește mult trafic.
  • După ce termini depanarea, asigură-te să dezactivezi opțiunile (în special opțiunea wp_savequeries, deoarece afectează performanța) site-ului.

Pentru a face modificările:

  1. Deschide fișierul wp_config.php prin intermediul unui client FTP.
  2. Caută opțiunea wp_debug. Editează-o la define( 'WP_DEBUG', true );. Dacă linia nu există, adaugă-o în fișier.
  3. În mod similar, editează sau adaugă linia define( 'SAVEQUERIES', true ); în fișier.
  4. Salvează. Ești gata pentru depanare.

Mai multe informații: Codex

26 dec. 2011 20:16:25
Comentarii

@justCallMeBiru -- pluginul Debug Bar nu necesită WP_DEBUG și SAVEQUERIES, deși este îmbunătățit de acestea.

Pat J Pat J
15 ian. 2014 18:35:29

Folosirea unui astfel de plugin, doar pentru o mică bucățică de informație, creează multă suprasarcină în opinia mea, și de aceea nu l-am sugerat în răspunsul meu. Cu toate acestea, se pare că oamenii preferă acest răspuns, sunt curios să aflu de ce.

t31os t31os
28 ian. 2014 18:02:08
2
44

Folosesc această funcție utilă care afișează template-ul curent doar pentru super administratori:

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

Sper că te ajută. :)

23 ian. 2014 15:06:41
Comentarii

Acesta este răspunsul principal, ar trebui să fie acceptat.

Hybrid Web Dev Hybrid Web Dev
13 mar. 2018 02:21:32

Eu folosesc și această metodă, dar încă nu afișează care „include” este folosit și arată doar pagina de nivel superior.

Burndog Burndog
8 iul. 2020 16:18:40
4
12

Adaugă următorul cod imediat după linia get_header în fiecare fișier de șablon relevant:

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

În browser-ul tău > vizualizează codul sursă, iar numele șablonului va fi afișat ca un comentariu în codul tău html, de exemplu:

<!-- page.php -->
27 dec. 2011 20:32:43
Comentarii

e prea mult efort să adaug asta peste tot

Adal Adal
18 feb. 2019 03:49:56

hahaha, de ce te-ai obosi cu asta dacă o să etichetezi fiecare fișier? pur și simplu etichetează-l cu numele real al fișierului!

Aurovrata Aurovrata
9 mai 2020 09:29:09

@Aurovrata a fost acum mult timp. Există soluții mult mai bune acum. Dar aveam un script simplu care insera codul în partea de sus a tuturor fișierelor dintr-un director, așa că nu era nevoie de hardcodare a numelor reale. Făcut în 1 sau 2 secunde.

ronald ronald
20 mai 2020 21:46:31

corect, :)

Aurovrata Aurovrata
21 mai 2020 14:27:52
0

Iată:

O listă HTML cu toate fișierele de șablon utilizate pentru pagina de destinație curentă, inclusiv toate părțile de șablon din plugin-uri, teme copil și/sau combinații de teme părinte, toate într-o singură linie de cod:

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

Este posibil să fie necesar să verificați dacă serverul dumneavoastră nu returnează slash-uri duble în nicio cale. Amintiți-vă să plasați acest cod după ce toate fișierele de șablon au fost deja utilizate, cum ar fi în footer.php, dar înainte de randarea bără de administrare.

Dacă calea admin-bar stuff apare în partea de sus sau orice alt fișier, schimbați numele fișierului template-loader.php în această linie de cod cu: orice nume de fișier de la care trebuie să începeți. Adesea: class-wp-admin-bar.php

Dacă aveți nevoie de aceasta în bara de administrare, folosiți prioritatea corectă (cea mai devreme) pentru a vă asigura că niciun fișier nu este adăugat la sfârșitul acestei liste. De exemplu:

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

Prioritatea -5 asigură încărcarea primul. Cheia este să apelați get_included_files() în momentul potrivit, altfel va fi necesară eliminarea unor elemente din array!

Pentru a descompune acest lucru:

Nu puteți colecta toate fișierele de șablon incluse fără un backtrace PHP. Superglobalurile din interiorul template_include nu le vor colecta pe toate. Cealaltă metodă este să „plasați un marker” în fiecare fișier de șablon, dar dacă trebuie să interacționați mai întâi cu fișierele, vă confruntați cu timpul și întreaga idee.

1) Trebuie să verificăm în interiorul tuturor fișierelor care au fost utilizate de cererea curentă WordPress. Și sunt multe! Nu fiți surprinși dacă utilizați 300 de fișiere înainte ca functions.php să fie înregistrat.

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

Folosim funcția PHP nativă get_included_files(), convertind backslash-urile în slash-uri pentru a se potrivi cu majoritatea căilor returnate de WordPress.

2) Tăiem acel array de la locul unde este înregistrat template-loader.php. După aceea, get_included_files() populat ar trebui să aibă doar fișierele de șablon.

/* Punctul magic, trebuie să găsim poziția sa în array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Scăpăm de punctul magic însuși în noul array creat */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);

3) Scurtăm rezultatele, nu avem nevoie de calea până la folderul temei sau al plugin-ului, deoarece șabloanele în uz pot fi amestecate din folderele de plugin-uri, teme sau teme copil.

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

4) În final, convertim din array într-o listă HTML frumoasă

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

O ultimă modificare poate fi necesară în partea 3) -înlocuire, dacă nu doriți includerile necesare de către plugin-uri. Acestea pot apela fișiere de clasă târziu și „intercepta” în timpul procesării ieșirii șablonului.

Cu toate acestea, am considerat rezonabil să le lăsăm vizibile, deoarece ideea este să urmărim ce a fost încărcat, chiar dacă nu este un „șablon” care randeză ieșirea în această etapă.

15 sept. 2017 09:14:10
1

Există un alt plugin mai simplu, creat special pentru acest scop. Mă gândesc să instalez debug bar, pentru că acele alte caracteristici par utile, dar acesta este mai simplu și special conceput pentru acest scop: http://wordpress.org/extend/plugins/what-the-file/

29 ian. 2013 06:22:00
Comentarii

Mi-a economisit ceva timp.

m4n0 m4n0
11 dec. 2020 16:08:22
0

Un lucru foarte simplu pe care îl fac este să inserez un comentariu HTML care identifică fișierul șablon în fiecare fișier relevant al temei, de exemplu, în partea de sus a index.php am

<!-- index -->

și în partea de sus a front-page.php

<!-- front -->

Dar evident, acest lucru necesită modificarea temei. Bănuiesc că ai putea adăuga o funcție personalizată în fișierul footer.php sau header.php care să îți spună ce fișier era folosit. Metoda de mai sus și tabelul de referință http://codex.wordpress.org/Template_Hierarchy sunt ceea ce tind să folosesc.

24 dec. 2011 22:40:49
0

Cea mai ușoară metodă pe care am găsit-o este să includ funcția WordPress pe tag-ul body. Aceasta va adăuga mai multe clase în funcție de pagina pe care o vizualizați (home pentru pagina principală, page pentru pagini, etc).

Verificați aici: http://codex.wordpress.org/Function_Reference/body_class

În plus, este utilă pentru țintirea elementelor cu CSS pe aceste pagini.

Cunoașterea Ierarhiei de Șabloane (http://codex.wordpress.org/Template_Hierarchy), așa cum a menționat David R, este de asemenea o idee bună.

25 dec. 2011 14:51:51