- Підключення файлів теми (теорія)
- Типи сторінок і назви файлів
- записи
- Запис (запис post)
- вкладення
- Архіви
- мітка
- Сторінка архіву типу записи
- Сторінка архіву за датою (день, місяць, рік)
- сторінка пошуку
- сторінка блогу
- Вбудовування (embeds)
- Як це працює
- фільтри
- Інші файли теми
У цьому пості мова піде про те, які бувають назви у файлів теми WordPress і за показ якої сторінки на сайті відповідає кожен з них. Це дуже важливі, потрібні, і в той же час дуже прості, для розуміння, знання. Ними повинен володіти кожен, хто працює з WordPress. Нижче повністю розписана структура файлів теми WordPress і порядок їх підключення (ієрархія).
Про ієрархії файлів теми я згадував у статті «Умовні теги в WordPress» . А нижче теж саме, тільки докладніше і зрозуміліше.
Підключення файлів теми (теорія)
Ієрархія, в даному випадку послідовна перевірка, говорить про те, що для виведення однієї сторінки на сайті, підходять кілька назв файлів. Перевірка який файл буде використаний йде по черзі. Тобто є список файлів, кожен з них по черзі перевіряється на фізичне існування, як тільки знайдений існуючий файл перевірка припиняється і знайдений файл використовується в якості шаблону.
Наприклад, ми заходимо на сторінку рубрики «Модулі» з ярликом plugins і id 25 - http://example.com/category/plugins. Тоді для генерації коду цієї сторінки WordPress буде по черзі перевіряти наявність наступних файлів (перевірка перерветься на першому існуючому файлі):
- category-plugins.php
- category-25.php
- category.php
- archive.php
- index.php
Повна схема для всіх видів сторінок і їх файлів виглядає так:
Ще одна схема, можливо вона зрозуміліше (стара):
меню
Типи сторінок і назви файлів
Нижче список сторінок і відповідають за них файли теми. В цьому розділі розписана картинка ієрархії файлів теми, яка трохи вище.
Нижче вказана сторінка сайту і відповідний їй список PHP файлів. Такі файли повинні знаходиться в кореневій папці теми.
записи
Сторінка (запис page)
Запис (запис post)
- single-post- {ярлик_запісі} .php
- single-post.php
- single.php
- singular.php
- index.php
Довільний тип запису
- {Любое_названіе} .php (для деревовидного типу з підтримкою шаблонів . З WP 4.7)
- single- {post_type} - {ярлик_запісі} .php
- single- {post_type} .php
- single.php
- singular.php
- index.php
вкладення
- {Начало_MIME_тіпа} .php
- {Конец_MIME_тіпа} .php
- {Начало_MIME_тіпа} - {конец_MIME_тіпа} .php
- attachment.php
- single-attachment- {ярлик_вложенія} .php (дозволяє вказати шаблон для окремої картинки)
- single-attachment.php (теж що і attachment.php)
- single.php
- singular.php
- index.php
Під його початку до кінця MIME типу, мається увазі перша і остання частина MIME типу, розділена /. Наприклад, MIME-тип текстового файлу: 'text / plain' і значить буде перевірятися наявність файл text.php, потім plain.php, потім text-plain.php.
Повний список MIME типів дивіться в описі get_allowed_mime_types () .
менюАрхіви
Рубрика
- category- {ярлик} .php
- category- {id} .php
- category.php
- archive.php
- paged.php (якщо сторінка пагінацію)
- index.php
мітка
- tag- {ярлик} .php
- tag- {id} .php
- tag.php
- archive.php
- paged.php (якщо сторінка пагінацію)
- index.php
таксономія
- taxonomy- {ярлик_таксономіі} - {ярлик_елемента} .php
- taxonomy- {ярлик_таксономіі} .php
- taxonomy.php
- archive.php
- paged.php (якщо сторінка пагінацію)
- index.php
Сторінка архіву типу записи
- archive- {ярлик_тіпа_запісі} .php
- archive.php
- paged.php (якщо сторінка пагінацію)
- index.php
сторінка автора
- author- {nickname} .php
- author- {id} .php
- author.php
- archive.php
- paged.php (якщо сторінка пагінацію)
- index.php
Сторінка архіву за датою (день, місяць, рік)
- date.php
- archive.php
- paged.php (якщо сторінка пагінацію)
- index.php
404 сторінка
сторінка пошуку
Головна сторінка
- front-page.php
- (Логіка постійних сторінок, якщо для головної обрана сторінка)
- home.php
- index.php
сторінка блогу
Сторінка блогу з'являється, коли для головної обрана постійна сторінка
Вбудовування (embeds)
Шаблони вбудовування використовуються коли запитується запис через REST API. Вбудовування з'явилися у версії 4.5 і дозволяють вбудовувати ваші записи в чужі сайти. Див. get_post_embed_url ()
- embed- {post-type} - {post_format} .php
- embed- {post-type} .php
- embed.php
Щоб змінити тільки контент вбудовування, можна в темі створити файл embed-content.php і описати там HTML. Оригінальний HTML знаходиться в файлі движка /wp-includes/theme-compat/embed-content.php
Як це працює
За всю логіку: який файл підключати, відповідає файл ядра wp-includes / template-loader.php . Якщо розібратися, в ньому все описано. Але, це заняття не особливо цікаве, тому я його розпишу.
Насамперед. template-loader.php підключається після того як завантажиться все середовище WordPress. Після того, як відпрацює файл wp-load.php і буде опрацьовано основний запит - функція wp () . Тобто template-loader.php підключається в самому-самому кінці PHP скрипта ...
Спочатку спрацьовує хук template_redirect . У цьому хук можна зробити якісь перевірки і якщо треба перенаправити на інший URL. У ньому потрібно обривати роботу скрипта через die (). Тобто якщо цей хук щось змінює, то на цьому робота файлу template-loader.php повинна закінчитися і ми «відлітаємо» на якусь іншу сторінку.
Далі спрацьовує нікому не цікавий хук exit_on_http_head. Він дозволяє зробити так, щоб при HTTP HEAD запиті що-небудь виводилося на екран ...
Далі йдуть перевірки за всіма умовним тегам де з'ясовується який файл шаблону підходить під поточний запит. Перевіряється умовний тег, потім ще один і ще ... Як тільки один з умовних тегів спрацював, викликається відповідна функція, яка знаходить відповідний файл шаблону і повертає шлях до нього. Всі такі функції описані в get_query_template () .
Далі - шлях до файлу теми визначено! Тепер він проходить через фільтр template_include . Який дозволяє нам змінити файл шаблону для поточного запиту.
Далі, файл підключається в PHP і запускається візуальна частина генерації сторінки.
меню
фільтри
Ієрархію файлів можна змінити через динамічні фільтри:
(Type) _template_hierarchy - фільтрує масив назв файлів ієрархії, за яким буде йти пошук потрібного файлу. З WP 4.7.
- (Type) _template - фільтрує шлях до вже визначився файлу шаблону.
Всі варіанти параметра type дивіться в однойменному параметр $ type функції get_query_template () . Ось вони:
- index
- 404
- archive
- post_type_archive
- author
- category
- tag
- taxonomy
- date
- home
- front_page
- page
- paged
- search
- single
- singular
- attachment
- comments_popup
Приклад використання такого фільтра дивіться у відповіді на це питання .
меню
Інші файли теми
Файли нижче також використовуються в темі, але вони просто підключаються і не беруть участь в ієрархії. Наприклад файл sidebar.php підключається в будь-якому файлі теми за допомогою функції get_sidebar () .
Список таких «підключаються» файлів.
-
джерело