3 способи створити шаблон сторінки
У цій статті я розповім про способи створення шаблонів для сторінок WordPress. Кожен спосіб несе у собі плюси та мінуси. Але перш ніж почати, коротко про те, що таке сторінки та чим вони відрізняються від записів.
У WordPress можна створювати сторінки (page) та записи (post). Вони відрізняються тим, що записи: потрапляють у стрічку на головній сторінці; для записів зазначаються категорії; записи не можуть бути деревоподібними, а сторінки: використовуються для такого вмісту як “Про мене”, “Контакти”, “Карта сайту”; немає категорій, а мають деревоподібну структуру. Записи зазвичай призначені для хронологічної інформації (за часом додавання), а сторінки для деревоподібної структури незалежною від часу. Наприклад, ця стаття опублікована як ” запис ” у рубриці ” Кодекс ” , а посилання меню шапки ведуть на сторінки: Функції .
Сторінки схожі на записи – вони розташовані в одній таблиці бази даних і дані майже однакові: заголовок, текст, додаткові поля і т.д. І те, й інше — це записи, але різних типів: сторінки деревоподібні та організуються шляхом створення батьківських та дочірніх сторінок, а записи об’єднуються рубриками та мітками. У WordPress можна створювати додаткові типи записів деревоподібних чи ні.
Часто потрібно створити окремий шаблон сторінки, щоб виведення інформації відрізнялося від інших сторінок. Створюючи шаблон сторінки в WordPress, можна змінити сторінку: видалити сайдбар, підвал, шапку, можна змінити сторінку до невпізнанності. Наприклад, на цьому сайті так змінюється сторінка, на якій виводяться коди файлів WordPress .
Див також: Шаблони сторінок для типів записів
Спосіб 1: шаблон сторінки через файл із довільною назвою (класичний спосіб)
Це найпоширеніший спосіб створити шаблон сторінки WordPress. Для цього потрібно створити .php файл, наприклад, tpl_my-page.php у папці теми та на самому початку файлу вписати мітку, що створений файл є шаблоном для сторінок:
<?php /* Template Name: Мій шаблон сторінки */ ?> <!-- Тут html/php код шаблону -->
Тепер при створенні сторінки в адмін-панелі в блоці «Властивості сторінки» ми зможемо вибрати “шаблон”:
З версії WordPress 4.7. такі шаблони сторінок можна створити для будь-якого типу запису, а не лише для page. Для цього доповніть коментар рядком: Template Post Type: post, page
, де post, page – це назви типів записів, до яких відноситься шаблон.
/* Template Name: Мій шаблон сторінки Template Post Type: post, page, product */
Докладніше читайте в окремій статті .
Переваги:
Створивши один шаблон, ми можемо зручно використовувати його для різних сторінок. Наприклад, можна створити шаблон без бічної панелі та використовувати його на різних сторінках.
- Можна отримати лише записи із вказаним шаблоном. Наприклад, можна вивести всі сторінки із шаблоном «Послуги» (файл servises.php). Іноді це зручно. Назва файлу шаблону зберігається в метаполі
_wp_page_template
, тому щоб вивести сторінки із зазначеним шаблоном, потрібно створити запит по метаполі (див. WP_Query ).
Недоліки:
Після створення файлу шаблону в папці теми потрібно зайти в адмін-панель і встановити шаблон для сторінки. При розробці це завжди зручно. Тому, якщо передбачається використовувати шаблон лише для однієї сторінки, використовуйте другий метод.
Як це працює:
Коли ви заходите в адмін-панель на сторінку редагування запису деревоподібного типу, WordPress переглядає всі .php
файли в кореневій папці теми та у всіх вкладених папках (переглядається один рівень) на наявність наступного рядка (рядок може розташовуватися будь-де і як завгодно у файлі):
Template Name: ***
Усі файли з подібними рядками збираються та виводяться у вибір шаблону до блоку “Атрибути сторінки”.
При публікації сторінки в довільне поле _wp_page_template
записується назва файлу шаблону або default
якщо шаблон не вказаний:
_wp_page_template=default
_wp_page_template=tpl_my-page.php
Далі, коли користувач відвідує сторінку, WordPress перевірять метаполі _wp_page_template
, якщо шаблон встановлено, то використовується файл шаблону. В іншому випадку пошук шаблону сторінки продовжується за ієрархією .
Пошуком відповідних файлів шаблону займається метод, це робить метод WP_Theme::get_post_templates() .
Локалізація назви шаблону
Назва задається у php коментарях, тому немає можливості перекласти цей рядок звичайним способом: через функцію перекладу, укладеного в теги <?php…?> . Однак WP сам намагається перевести цей рядок при виведенні, використовуючи дані перекладу. Таким чином, для перекладу нам потрібно додати цей рядок до списку перекладів теми. Зробити це найзручніше відразу після заголовка – так усім буде зрозуміло навіщо потрібен такий дивний виклик функції перекладів __() :
/** * Template Name: Мій шаблон сторінки * Template Post Type: post, page, product */ __( 'Мій шаблон сторінки', 'my-theme');
my-theme
– це ID перекладу – параметр Text Domain: , який вказується в load_theme_textdomain() .
Спосіб 2: шаблон сторінки через файл із конкретною назвою (ієрархія файлів шаблону)
Цей спосіб передбачає створення файлу в папці теми з конкретною назвою: page-{слаг-страницы}.php
або page-{ID-страницы}.php
. Докладніше дивіться за цим посиланням .
Під час створення сторінки їй встановлюється ярлик (склад, альтернативна назва). Він використовується в УРЛ сторінки. І його можна змінити:
Для створення шаблону цим способом, вам потрібно дізнатися склад сторінки і створити файл у папці теми. Допустимо, наш склад як на картинці дорівнює contacts , тоді створимо в темі файл page-contacts.php . і заповнимо його потрібним кодом (можна скопіювати вміст із файлу шаблону page.php та відредагувати під себе). Все, тепер при відвідуванні сторінки ми маємо побачити новий шаблон. Аналогічно можна взяти ID (нехай 12) сторінки та створити файл page-12.php .
Переваги:
Немає необхідності входити в адмін-панель та встановлювати файл шаблону. Шаблон починає працювати одразу після створення файлу. Зручно під час розробки.
Недоліки:
Шаблон створюється лише для однієї конкретної сторінки. Залежить від складу сторінки, якщо він зміниться, шаблон працювати не буде. Якщо використовувати ID, то залежність від складу пропадає, але стає незрозуміло у файлі теми, до якої сторінки відноситься шаблон (якщо кілька шаблонів з ID).
Практично марний при написанні шаблонів, а тим більше плагінів. Його можна використовувати, коли правиш свій сайт, в якому злаг або ID сторінки відомі заздалегідь.
Як це працює:
WordPeress підбирає якийсь файл використовувати в наступному порядку (файли повинні бути в корені теми):
- {будь-яка назва}.php (коли використовується шаблон сторінки)
- page-{ярлик_запису}.php
- page-{ID_запису}.php
- page.php
- singular.php
- index.php
Спосіб 3: шаблон сторінки через фільтр “template_include” (коддінг)
Це просунутий спосіб, він складніший, але разом із складністю він відкриває широкі можливості. За допомогою цього способу можна задати шаблон будь-якій сторінці, запису, категорії, будь-якій публікації на сайті або взагалі групі будь-яких публікацій.
Розглянемо з прикладу:
// Фільтр передає змінну $template - шлях до файлу шаблону. // Змінюючи цей шлях, ми змінюємо файл шаблону. add_filter('template_include', 'my_template'); function my_template( $template ) { аналог другого способу // якщо це сторінка зі складом portfolio, використовуємо файл шаблону page-portfolio.php // використовуємо умовний тег is_page() if( is_page('portfolio') ){ if ( $new_template = locate_template( array( 'page-portfolio.php' ) ) ) ) return $new_template; } # шаблон для групи рубрик // Цей приклад буде використовувати файл із папки теми tpl_special-cats.php, // як шаблон для рубрик з ID 9, назвою "Без рубрики" та слагом "php" if( is_category( array( 9, 'Без рубрики', 'php') ) ){ return get_stylesheet_directory() . '/tpl_special-cats.php'; } # шаблон для запису за ID // файл шаблону розташований у папці плагіна /my-plugin/site-template.php global $post; if( $post->ID == 12 ){ return wp_normalize_path(WP_PLUGIN_DIR). '/my-plugin/site-template.php'; } шаблон для сторінок довільного типу "book" // передбачається, що файл шаблону book-tpl.php лежить у папці теми global $post; if( $post->post_type == 'book' ){ return get_stylesheet_directory() . '/book-tpl.php'; } return $template; }
Такий код потрібно розмістити у файл теми functions.php , у плагін, або підключити якось ще.
Як видно з прикладу, під час фільтра template_include вже працюють умовні теги, встановлені глобальні змінні: $wp_query , $post …
Переваги:
Можна встановити шаблон для будь-якої сторінки чи групи сторінок. Практично повний карт-бланш у діях.
- Можна створити шаблон під час написання плагіна.
Недоліки:
- Необхідність писати код та окремо його підключати (наприклад, у functions.php теми).
Як це працює:
- Читайте опис фільтра template_include .