Jak dowiedzieć się, która strona szablonu wyświetla bieżącą stronę?

54

Kiedy aktywujesz motyw Wordpress, zawsze trudno jest znaleźć plik, który chcesz zmienić. Masz pomysł, jak to uprościć?

Ale z drugiej strony, biorąc pod uwagę funkcjonalność get_template_part, może to być niemożliwe. Co mówisz?

Przeciętny Joe
źródło
1
Sprawdzam html i znajduję zidentyfikowany tag lub coś wyjątkowego.
Naoise Golden
1
Wyświetl kod źródłowy i poszukaj klas treści, które podpowiedzą, który szablon jest używany. Daje ci również id
Brad Dalton
@BradDalton +1. Zwłaszcza, gdy nie wolno nam instalować wtyczki ani pisać funkcji, aby osiągnąć cel.
Subrata Sarkar

Odpowiedzi:

34

Przyłącz się template_include, ustaw globalnie, aby zanotować szablon ustawiony przez motyw, a następnie wczytaj tę wartość z powrotem do stopki lub nagłówka, aby zobaczyć, który szablon jest wywoływany dla danego widoku.

Mówiłem o tym haku filtra wcześniej w Uzyskaj nazwę bieżącego pliku szablonu , ale idź pobierz kopię tego kodu i umieść go w functions.phppliku swojego motywu .

Następnie otwórz motyw header.phplub footer.php(lub gdziekolwiek chcesz) i użyj czegoś takiego jak poniżej, aby wydrukować bieżący szablon.

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

Jeśli chcesz użyć tego w witrynie produkcyjnej i trzymać te informacje z dala od użytkowników niebędących administratorami, dodaj trochę logiki warunkowej.

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

Teraz możesz śledzić, które widoki korzystają z jakiego szablonu, jednocześnie utrzymując te informacje z dala od użytkowników.

t31os
źródło
1
Jeśli coś jest nie tak z tą odpowiedzią lub jeśli ktoś może komentować, co można zrobić, aby poprawić tę odpowiedź, zrób to, upuść komentarz tutaj i podziel się swoimi przemyśleniami i pomysłami, jak poprawić tę odpowiedź.
t31os
1
To nie zadziałało, stary, mówi „Niezdefiniowana funkcja”
Lucas Bustamante
1
@LucasB to samo tutaj, oto błąd, który dostałem
Lincoln Bergeson
To powinno byćget_page_template
Blazemonger,
40

Cóż, jeśli wszystko, co chcesz, to sprawdzić, który plik szablonu został użyty do wygenerowania bieżącej strony, nie musisz brudzić rąk kodem;)

Jest przydatna wtyczka o nazwie Debug Bar . To świetny pomocnik w wielu sytuacjach, w tym w twojej. Zdecydowanie powinieneś to sprawdzić - dla mnie i wielu innych jest niezbędnym towarzyszem każdego rozwoju WP.

Załączam zrzut ekranu, który może sprawić, że się zakochasz ...

wprowadź opis zdjęcia tutaj

Aby uzyskać Debug Bar pracę , musisz włączyć wp_debugi wp_savequeriesopcje. Te opcje są domyślnie wyłączone.

Zanim jednak wprowadzisz jakiekolwiek zmiany, pamiętaj o kilku kwestiach:

  • Nie rób tego w środowisku produkcyjnym, chyba że strona internetowa nie zapewnia dużego ruchu.
  • Po zakończeniu debugowania pamiętaj o wyłączeniu opcji (szczególnie opcji wp_savequeries, ponieważ wpływa to na wydajność) witryny.

Aby wprowadzić zmiany:

  1. Otwórz wp_config.phpplik za pomocą klienta ftp.
  2. Wyszukaj wp_debugopcję. Edytuj to do define( 'WP_DEBUG', true );. Jeśli linia nie jest obecna, dodaj ją do pliku.
  3. Podobnie edytuj lub dodaj linię define( 'SAVEQUERIES', true );do pliku.
  4. Zapisać. Jesteś gotowy do debugowania.

Więcej informacji: Kodeks

Michał Mau
źródło
2
@justCallMeBiru - wtyczka Debug Bar nie wymaga WP_DEBUG i SAVEQUERIESjest przez nią ulepszona .
Pat J
3
Uruchomienie takiej wtyczki, tylko dla jednego kawałka informacji, tworzy mnóstwo napowietrznych imho, i dlatego właśnie nie sugerowałem tego we własnej odpowiedzi. To powiedziawszy, wyraźnie ludzie wolą tę odpowiedź, jestem ciekawy, dlaczego.
t31os
23

Korzystam z tej przydatnej funkcji, która wyświetla bieżący szablon tylko dla superadministratorów:

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

Mam nadzieję, że to pomaga. :)

mightypixel
źródło
2
To jest odpowiedź goto, należy ją zaakceptować.
Hybrid Web Dev
12

Dodaj następujący kod bezpośrednio po wierszu get_header w każdym odpowiednim pliku szablonu:

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

W przeglądarce> wyświetl źródło, a nazwa szablonu zostanie wyświetlona jako komentarz w kodzie HTML, np

<!-- page.php -->
Ronald
źródło
dodawanie tego wszędzie za dużo wysiłku
Adal
4

Najłatwiejszy sposób, jaki znalazłem, to włączenie funkcji WordPress do tagu body. Dodanie kilku klas w zależności od tego, którą stronę przeglądasz (strona główna dla strony przedniej, strona dla strony itp.).

Sprawdź to tutaj: http://codex.wordpress.org/Function_Reference/body_class

Dodatkowo pomaga w kierowaniu elementów za pomocą CSS na tych stronach.

Zapoznanie się z hierarchią szablonów (http://codex.wordpress.org/Template_Hierarchy), jak wspomniał David R, jest również dobrym pomysłem.

CookiesForDevo
źródło
4

Jest jeszcze jedna wtyczka typu bare-bone przeznaczona specjalnie do tego celu. Skłaniam się do zainstalowania paska debugowania, ponieważ te inne funkcje wydają się przydatne, ale ta jest bardziej podstawowa i specjalnie do tego celu: http://wordpress.org/extend/plugins/what-the-file/

Julian K.
źródło
3

Jedną bardzo prostą rzeczą, którą robię, jest wstawienie komentarza HTML identyfikującego plik szablonu w każdym odpowiednim pliku motywu, np. Na górze pliku index.php, który mam

<!-- index -->

i na górze strony frontowej.php

<!-- front -->

Ale oczywiście wymaga to modyfikacji motywu. Podejrzewam, że możesz dodać niestandardową funkcję w pliku footer.php lub header.php, która powie ci, który plik był używany. Powyższą metodę i tabelę referencyjną http://codex.wordpress.org/Template_Hierarchy używam.


źródło
3

Istnieje wtyczka o nazwie Theme Check, która właśnie to robi. Wyświetla nazwę bieżącego pliku szablonu używanego jako komentarz HTML.

navjotjsingh
źródło
3

Proszę bardzo:

Lista HTML ze wszystkimi plikami szablonów używanych dla bieżącej strony docelowej, w tym wszystkie części szablonu z wtyczek, motywu potomnego i / lub kombinacji motywu nadrzędnego , wszystkie w jednym wierszu kodu:

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

MUSISZ sprawdzić , czy Twój serwer nie zwraca dubble ukośników na żadnej ścieżce . Pamiętaj, aby umieścić to po tym, jak wszystkie pliki szablonów faktycznie zostały użyte, jak w footer.php, ale przed renderowaniem paska administratora .

jeśli admin-bar stuffścieżka jest wyświetlana u góry lub w innym pliku, zmień nazwę pliku template-loader.phpw tym wierszu kodu na: dowolną nazwę pliku, z której chcesz przerwać. Często:class-wp-admin-bar.php

jeśli potrzebujesz tego na pasku administracyjnym, użyj odpowiedniego priorytetu (najwcześniej), aby mieć pewność, że żadne pliki nie zostaną wprowadzone na końcu tej listy. Na przykład:

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

priorytet -5upewnij się, że najpierw ładuje. Kluczem jest, aby zadzwonić get_included_files()w odpowiednim momencie, w przeciwnym razie potrzebne będzie popping tablicy!

Aby to rozbić:

Nie można zebrać wszystkich dołączonych plików szablonów bez śledzenia PHP. Superglobale w środku template_include nie zgromadzą ich wszystkich . Innym sposobem jest „umieszczenie znacznika” w każdym pliku szablonu, ale jeśli musisz najpierw wchodzić w interakcję z plikami, masz czas i cały pomysł.

1) Musimy sprawdzić wewnątrz wszystkie pliki, które były używane przez bieżące żądanie Wordpress. I jest ich wiele! Nie zdziw się, jeśli używasz 300 plików, zanim zarejestrujesz nawet plik functions.php.

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

Używamy natywnego get_included_files () PHP, konwertując ukośniki odwrotne na ukośniki do przodu, aby pasowały do ​​większości ścieżek zwrotnych Wordpress.

2) Wycinamy tablicę, z której zarejestrowany jest plik template-loader.php. Następnie zapełnione pliki get_included_files () powinny zawierać tylko pliki szablonów.

/* 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) Skróć wyniki, nie potrzebujemy ścieżki, dopóki folder motywów lub folder wtyczek, jako używane szablony , nie będą mogły być mieszane z wtyczek, motywów lub folderów motywów potomnych.

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

4) Na koniec przekonwertuj z tablicy na ładną listę HTML

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

Ostatnia modyfikacja może być potrzebna w części 3) -replacement , jeśli nie chcesz, aby wymagane były wtyczki. Mogą dzwonić class-filespóźno i „przechwytywać” podczas przetwarzania danych wyjściowych szablonu.

Uznałem jednak za rozsądne pozostawienie ich widocznych, ponieważ pomysł polega na śledzeniu tego, co zostało załadowane , nawet jeśli nie jest to „szablon” renderujący dane wyjściowe na tym etapie.

Jonas Lundman
źródło