Создание собственных шаблонов страниц (Page Templates) в WordPress — мощный инструмент, который позволяет гибко управлять структурой и отображением контента. Обычно такие шаблоны создаются внутри темы, однако иногда возникает потребность сделать шаблон на уровне плагина, чтобы он работал независимо от активной темы.
В этой статье рассмотрим, как реализовать кастомный Page Template внутри плагина, добавить его в выбор шаблонов страниц в админке и подключать через хуки WordPress.
Что такое Page Template в WordPress
Page Template — это файл с расширением .php, который определяет уникальную структуру и логику для отдельных страниц. Обычно такие файлы лежат в корне темы, например:
<?php
/*
Template Name: Custom Template
*/
get_header();
?>
<h1>Hello, World!</h1>
<?php get_footer(); ?>
После добавления такого файла WordPress автоматически предложит выбрать его как шаблон при редактировании страницы. Но по умолчанию эта возможность ограничена только областью темы.
Проблема: шаблон из плагина не определяется WordPress
Если просто создать файл шаблона внутри плагина, например/my-plugin/pages/template-custom.php
и добавить туда мета-информацию с Template Name, WordPress не увидит этот шаблон.
Причина проста: движок сканирует только директорию активной темы на наличие таких файлов.
Решение: регистрируем шаблон страницы из плагина
Чтобы WordPress «увидел» шаблон, нужно сообщить ему об этом с помощью хуков и фильтров. Ниже — пошаговое руководство.
1. Добавляем шаблон в список доступных
Для начала определим переменную, где будут храниться пути к нашим кастомным шаблонам:
private $templates = [
'pages/template-custom.php' => 'Custom Template'
];
Далее подключаем фильтр, который добавит наш шаблон в список стандартных WordPress-шаблонов:
add_filter('theme_page_templates', [$this, 'register_plugin_template']);
А вот сам метод:
public function register_plugin_template($templates) {
$templates = array_merge($templates, $this->templates);
return $templates;
}
Теперь в админке WordPress, при редактировании страницы, появится новый пункт Custom Template в выпадающем списке “Шаблон страницы”.
2. Подключаем шаблон при отображении страницы
Чтобы WordPress подгрузил нужный файл из плагина, добавляем фильтр на template_include:
add_filter('template_include', [$this, 'load_plugin_template']);
Реализация метода:
public function load_plugin_template($template) {
global $post;
// Получаем выбранный шаблон страницы
$meta_template = get_post_meta($post->ID, '_wp_page_template', true);
// Проверяем, соответствует ли он нашему
if (isset($this->templates[$meta_template])) {
$file = plugin_dir_path(__FILE__) . $meta_template;
if (file_exists($file)) {
return $file;
}
}
return $template;
}
Теперь, если страница использует шаблон Custom Template, WordPress загрузит именно файл из плагина, а не из темы.
3. Проверяем и тестируем
Создайте в папке плагина файл:/pages/template-custom.php
С содержимым:
<?php
/*
Template Name: Custom Template
*/
get_header();
?>
<main class="container">
<h1>Контент из плагина</h1>
<p>Это шаблон страницы, созданный внутри плагина.</p>
</main>
<?php get_footer(); ?>
Далее:
- Активируйте плагин.
- В админке создайте новую страницу.
- В правой панели в поле «Шаблон» выберите Custom Template.
- Сохраните и откройте страницу — вы увидите шаблон из вашего плагина.
4. Дополнительные проверки и защита
Чтобы избежать ошибок, если файл шаблона случайно удалён или перемещён, используйте проверку file_exists().
Если файл не найден — WordPress автоматически загрузит стандартный шаблон темы.
5. SEO и производительность
Когда шаблон страницы загружается из плагина, важно сохранить правильную SEO-структуру сайта. Для этого:
- Всегда подключайте
get_header()иget_footer()— чтобы темы SEO-плагинов (Yoast, RankMath и т.п.) корректно подхватывали метаданные. - Убедитесь, что
<title>,<meta>и Open Graph теги выводятся через хуки темы. - Если шаблон полностью кастомный, вручную вызовите
wp_head()иwp_footer()для совместимости.
Пример минимального SEO-дружественного шаблона:
<?php
/*
Template Name: Landing Template
*/
get_header(); ?>
<main class="landing">
<section>
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
</section>
</main>
<?php get_footer(); ?>
6. Где пригодится Page Template внутри плагина
Создание шаблонов страниц на уровне плагина полезно в следующих случаях:
- Плагин добавляет собственный тип контента (Custom Post Type) и требует особого вывода.
- Необходимо отобразить страницу без обёртки темы (например, лендинг или интеграция с фронтендом на React/Vue).
- Вы хотите, чтобы плагин оставался полностью независимым от активной темы WordPress.
Заключение
Теперь вы умеете создавать кастомные Page Templates внутри плагина, регистрировать их через фильтры WordPress и подключать при выводе страницы.
Этот подход открывает путь к созданию полноценных модульных решений, где плагин может сам управлять шаблонами, не вмешиваясь в тему.