Вопрос или проблема
Я обдумывал несколько идей, чтобы это реализовать, и придумал что-то немного странное… но это работает.
Я создаю тему для Админки для своей многосайтовой сети. Пользователи будут видеть как фронтенд, так и бэкенд страницы, когда они вошли в систему, поэтому для меня важно, чтобы у обоих пространств был единый внешний вид — я не хочу, чтобы они оказались в “старой” панели управления WP.
Так как же заставить дизайн шапки/подвала базового сайта отображаться на любом сетевом сайте, когда пользователь вошел в систему и находится в бэкенде?
Вот что я сделал:
Вставил ob_start()
и ob_get_clean()
в стратегически важных местах в header.php
и footer.php
в дочерней теме, производной от основной темы моего базового сайта.
<некоторые элементы шапки>
ob_start()
<html шапки, который я хочу использовать на всех сайтах сети>
<?php $html = ob_get_clean(); echo $html; harvest_html($html, 'header'); ?>
Функция harvest_html
просто берет строку и записывает её в файл. Я делаю то же самое для подвала. Чтобы уменьшить нагрузку, я позволяю этой функции выполняться только когда пользователь is_super_admin()
. Пока супер-администратор заходит хотя бы один раз, шапка/подвал будут собраны.
Затем, в простом плагине, я внедряю собранный HTML в Админку, подключившись к admin_head
и in_admin_footer
. Конечно, любое необходимое CSS или JS нужно подключить в тот же момент.
Это работает. Любой пользователь, который вошел в свою подсайтовую страницу и переходит на любую страницу Админки, получит шапку/подвал базового сайта, независимо от темы, которую он в данный момент использует.
И это относительно низкое в обслуживании, так как любые изменения, внесенные в шапку/подвал для базового сайта, будут автоматически собираться.
Я также обрабатываю динамические элементы шапки/подвала (например, если какой-то PHP выводит имя пользователя или время суток и т.д.), разбирая вызовы функций, идентифицированные специальной оберткой, которую я добавляю вокруг них, а затем eval’ю их обратно в точке, где они впрыскиваются в Админку.
Ответ или решение
Заголовок и подвал в административной панели WordPress Multisite
Создание единого внешнего вида для общих страниц администрирования в сети WordPress Multisite может быть сложной задачей, особенно если пользователи должны почувствовать согласованность между фронтендом и бэкендом. В этом ответе мы подробно рассмотрим систему внедрения заголовков и подвалов на административные страницы, основанную на оригинальной теме сайта, что позволяет избежать "стандартного" административного интерфейса WordPress и внедрить единый стиль.
1. Цель проекта
Основная цель данной реализации — обеспечить единый стиль заголовка и подвала для всех сайтов в мультисайте, чтобы при переключении между фронтендом и бэкендом у пользователей не возникало чувства "другого" интерфейса. Это особенно важно для обеспечения бесшовного пользовательского опыта для суперадминистраторов и других пользователей.
2. Решение
Для достижения этой цели мы используем следующий подход:
- Создание дочерней темы от основной темы сайта.
- Инъекция кода в функции заголовка и подвала с использованием буферизации вывода (
ob_start()
иob_get_clean()
). - Хранение динамического HTML-кода в файле для последующего использования.
- Инъекция обработанного HTML в административные страницы при помощи плагина.
3. Применение
3.1. Стратегия внедрения
На первоначальном этапе необходимо внедрить код в файлы header.php
и footer.php
вашей дочерней темы. Пример кода может выглядеть следующим образом:
<some header stuff>
ob_start(); // Начинаем буферизацию вывода
<header html I want to reuse across network>
<?php
$html = ob_get_clean();
echo $html;
harvest_html($html, 'header');
?>
Аналогично следует поступить и в footer.php
.
3.2. Функция harvest_html
Функция harvest_html
отвечает за создание и обновление файла с HTML кодом заголовка и подвала. Мы ограничиваем её выполнение только для суперадминистраторов, что помогает уменьшить накладные расходы на производительность.
function harvest_html($html, $type) {
if (is_super_admin()) {
// Логика записи $html в файл
}
}
3.3. Внедрение в административные страницы
Создаем простой плагин, который обеспечивает инъекцию забранного HTML-кода в админские страницы. Используйте хуки admin_head
и in_admin_footer
для подключения.
add_action('admin_head', 'inject_custom_header');
add_action('in_admin_footer', 'inject_custom_footer');
function inject_custom_header() {
// Вставка сохраненного заголовка
}
function inject_custom_footer() {
// Вставка сохраненного подвала
}
4. Обработка динамического контента
Для обработки динамических частей заголовка и подвала, таких как имя пользователя или текущее время, мы добавляем специальный обрамляющий тег, который позволит извлечь функцию и снова выполнить её в нужном месте.
// Пример кода для динамического контента
if (strpos($html, '{{dynamic_function}}') !== false) {
eval('<?= dynamic_function(); ?>');
}
5. Заключение
С данным подходом ваш интерфейс административной панели WordPress становится согласованным и привлекательным для пользователей. Это решение минимизирует необходимость в постоянных изменениях, ведь любые обновления в заголовке или подвале будут автоматически применяться. В результате, вы обеспечите высокое качество пользовательского опыта на всех сайтах вашей мультисети.
Такое решение не только улучшает визуальное восприятие, но и создает более профессиональный и целостный интерфейс для всех пользователей. Убедитесь, что ваш код хорошо документирован и структурирован, для облегчения его поддержки и дальнейшего развития.