Як дізнатися, яка сторінка шаблону обслуговує поточну сторінку?


54

Коли ви активуєте тему Wordpress, завжди виникає клопот, щоб дізнатися, в який файл перейти, щоб змінити речі. Будь-яка ідея, як спростити речі?

Але з іншого боку, враховуючи функціональність get_template_part, це може бути неможливим. Що ти сказав?


1
Я перевіряю html та знаходжу виявлений тег чи щось унікальне.
Naoise Golden

1
Перегляньте вихідний код і знайдіть класи тіла, які підкажуть, який шаблон використовується. Також дає вам ідентифікатор
Бред Далтон


@BradDalton +1. Особливо, коли нам не дозволяється встановлювати плагін або записувати функцію для досягнення мети.
Субрата Саркар

Відповіді:


34

Підключіться template_include, встановіть глобальний, щоб відзначити шаблон, встановлений темою, а потім прочитайте це значення назад у нижньому колонтитулі чи заголовку, щоб побачити, який шаблон викликається для заданого перегляду.

Раніше я говорив про цей гак фільтрів у розділі Отримати ім’я поточного файлу шаблону , але перейдіть на копію цього коду та розгорніть його у functions.phpфайлі вашої теми .

Потім відкрийте тему header.phpабо footer.php(або де завгодно) та використовуйте щось подібне до наступного, щоб роздрукувати поточний шаблон.

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

Якщо ви хотіли використовувати це на виробничому сайті і тримати цю інформацію подалі від користувачів, які не є адміністраторами, додайте трохи умовної логіки.

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

Тепер ви можете відслідковувати, які погляди використовують шаблон, при цьому тримаючи цю інформацію подалі від відвідувачів.


1
Якщо з цією відповіддю щось не так, або якщо хтось міг би дати коментар щодо того, що можна зробити, щоб покращити цю відповідь, зателефонуйте, киньте тут коментар та поділіться своїми думками та ідеями щодо того, як зробити це краще.
t31о

1
Це не спрацювало, брато, говорить "Невизначена функція"
Лукас Бустаманте,

1
@LucasB те саме, ось помилка, яку я отримав
Лінкольн Бергесон


40

Ну, якщо все, що вам потрібно, це перевірити, який файл шаблону був використаний для генерації поточної сторінки, то вам не потрібно забруднити руки кодом;)

Є цей зручний плагін під назвою Bar Debug Bar . Це чудовий помічник у багатьох ситуаціях, включаючи вашу. Ви обов'язково повинні це перевірити - для мене та багатьох інших це обов'язковий супутник для будь-якої розробки WP.

Я додав скріншот, завдяки якому можна закохатись ...

введіть тут опис зображення

Щоб отримати Debug Bar працювати , Вам необхідно включити wp_debugі wp_savequeriesопції. Ці параметри за замовчуванням знаходяться у відключеному стані.

Перш ніж внести будь-які зміни, пам’ятайте про кілька моментів:

  • Не робіть цього у виробничих умовах, якщо веб-сайт не забезпечує багато трафіку.
  • Після завершення налагодження переконайтесь, що вимкніть параметри (особливо параметр wp_savequeries, оскільки це впливає на продуктивність) веб-сайту.

Щоб внести зміни:

  1. Відкрийте wp_config.phpфайл через ftp-клієнт.
  2. Пошук wp_debugваріанту. Відредагуйте його в define( 'WP_DEBUG', true );. Якщо рядка немає, додайте його у файл.
  3. Аналогічно відредагуйте або додайте рядок define( 'SAVEQUERIES', true );у файл.
  4. Зберегти. Ви готові до налагодження.

Більше інформації: Codex


2
@justCallMeBiru - плагін для налагодження не потребує, WP_DEBUG і SAVEQUERIESхоча він покращений ними.
Пат Дж

3
Запускаючи такий плагін, лише за один охайний шматочок інформації створюється багато накладних imho, і, отже, саме тому я не запропонував цього у власній відповіді. Але сказано, що явно люди віддають перевагу цій відповіді, мені цікаво знати, чому все-таки.
t31о

23

Я використовую цю зручну функцію, яка відображає поточний шаблон лише для супер-адміністраторів:

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

Сподіваюся, що це допомагає. :)


2
Це відповідь goto, її слід прийняти.
Hybrid Web Dev

12

Додайте наступний код відразу після рядка get_header у кожному відповідному файлі шаблону:

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

У вашому браузері> джерело перегляду, а назва шаблону відображатиметься як коментар у вашому HTML-коді, наприклад

<!-- page.php -->

занадто багато зусиль, щоб додати це скрізь
Адал

4

Найпростіший спосіб, який я знайшов, - це включити функцію WordPress на тег тіла. Він додасть кілька класів залежно від того, яку сторінку ви переглядаєте (домашня сторінка для передньої сторінки, сторінка для сторінки тощо).

Перевірте це тут: http://codex.wordpress.org/Function_Reference/body_class

Плюс це корисно для націлювання елементів за допомогою CSS на цих сторінках.

Знайомство з Ієрархією шаблонів (http://codex.wordpress.org/Template_Hierarchy), як згадував Давид Р, також є хорошою ідеєю.


4

Для цього є ще один плагін з голими кістками. Я схиляюся до встановлення налагоджувальної панелі, тому що інші функції виглядають корисними, але ця є більш базовою і спеціально для цієї мети: http://wordpress.org/extend/plugins/what-the-file/


3

Я дуже просту річ - вставити коментар HTML, що ідентифікує файл шаблону, у кожен відповідний файл теми, наприклад у верхній частині index.php у мене

<!-- index -->

і вгорі передньої сторінки.php

<!-- front -->

Але очевидно, що це потребує модифікації теми. Я підозрюю, що ви можете додати спеціальну функцію у файл footer.php або header.php, який би сказав вам, який файл використовується. Наведений вище метод та довідкова діаграма http://codex.wordpress.org/Template_Hierarchy - це те, що я, як правило, використовую.


3

Існує плагін під назвою Theme Check, який робить саме це. Він відображає ім'я поточного файлу шаблону, який використовується як коментар HTML.


3

Ось вам:

HTML-список із усіма файлами шаблонів, які використовуються для поточної цільової сторінки, включаючи всі частини шаблонів із плагінів, дочірніх та / або батьківських комбінацій тем , все в одному рядку коду:

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

Ви МОЖЕТЕ перевірити, чи ваш сервер не повертає сумнірні косої риски жодним шляхом . Не забудьте розмістити це після того, як усі файли шаблонів були фактично використані, як, наприклад, у footer.php, але до того , як відобразиться бар адміністратора .

якщо admin-bar stuffшлях відображається вгорі або будь-який інший файл, змініть ім'я файлу template-loader.phpв цьому рядку коду на: яке б ім’я фільму вам не потрібно було перервати. Часто:class-wp-admin-bar.php

якщо вам це потрібно на панелі адміністратора, використовуйте правий пріоритет (якнайшвидший), щоб зробити так, щоб у кінці цього списку не було введено жодних файлів . Наприклад:

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

першочергово -5змушуйте спочатку завантажувати. Ключ - зателефонувати get_included_files()в потрібний момент, інакше потрібен певний масив!

Щоб розбити це:

Ви не можете зібрати всі включені файли шаблонів без PHP зворотнього ходу. Суперглобали всередині template_include збирають їх усіх . Інший спосіб - "розмістити маркер" у кожному файлі шаблону, але якщо вам потрібно спочатку взаємодіяти з файлами, ви затуманюєте час та всю ідею.

1) Нам потрібно перевірити все файли, які використовували поточний запит Wordpress. А їх багато! Не дивуйтеся, якщо ви використовуєте 300 файлів, перш ніж навіть буде зареєстровано функцію.php.

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

Ми використовуємо PHP натиснувши get_included_files (), перетворюючи зворотні косої риси в передні нахили, щоб відповідати більшості повернених шляхів Wordpress.

2) Ми вирізаємо цей масив з того місця, де зареєстрований шаблон-loader.php. Після цього у заповнений get_included_files () повинні бути заповнені лише файли шаблонів.

/* 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) Скоротіть результати, нам не потрібен шлях, поки папка теми чи папка плагінів, як шаблони, що використовуються, не можуть змішуватися із плагінів, папок теми чи дочірніх тем.

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

4) Нарешті, перетворіть з масиву в приємний список HTML

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

Остання зміна може знадобитися в part3 ) -заміні , якщо ви не хочете, щоб вимагали включені плагіни. Вони можуть дзвонити class-filesпізно і "перехоплювати" під час обробки виводу шаблону.

Однак я вважав розумним залишати їх видимими, оскільки ідея полягає у тому, щоб відслідковувати завантажені , навіть якщо це не "шаблон", який надає вихід на цьому етапі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.