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?


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.


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


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


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. :)


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

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.



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.



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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.