Одинаковый заголовок/подвал в админке на всех сайтах сети в многосайте

Вопрос или проблема

Я обдумывал несколько идей, чтобы это реализовать, и придумал что-то немного странное… но это работает.

Я создаю тему для Админки для своей многосайтовой сети. Пользователи будут видеть как фронтенд, так и бэкенд страницы, когда они вошли в систему, поэтому для меня важно, чтобы у обоих пространств был единый внешний вид — я не хочу, чтобы они оказались в “старой” панели управления 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 становится согласованным и привлекательным для пользователей. Это решение минимизирует необходимость в постоянных изменениях, ведь любые обновления в заголовке или подвале будут автоматически применяться. В результате, вы обеспечите высокое качество пользовательского опыта на всех сайтах вашей мультисети.

Такое решение не только улучшает визуальное восприятие, но и создает более профессиональный и целостный интерфейс для всех пользователей. Убедитесь, что ваш код хорошо документирован и структурирован, для облегчения его поддержки и дальнейшего развития.

Оцените материал
Добавить комментарий

Капча загружается...