Модифицируем админку WordPress: лайфхаки для клиентов и команд

Админка WordPress — это рабочее пространство. И как любое рабочее пространство, её можно организовать под конкретные задачи. Вот как превратить стандартную админку в удобный инструмент для клиентов или эффективную среду для команды.

Краткое содержание

🎯 1. Адаптация админки для клиентов

Создание интуитивного интерфейса для не-технических пользователей

Проблема: Клиент путается в меню, не находит нужные настройки, случайно что-то ломает.

Решение: Создаем «клиентский режим»

php
// В functions.php или в кастомном плагине add_action('admin_menu', function() { $user = wp_get_current_user(); // Проверяем роль пользователя (клиент) if (in_array('client', $user->roles) || in_array('subscriber', $user->roles)) { // Убираем ненужные пункты меню remove_menu_page('tools.php'); // Инструменты remove_menu_page('options-general.php'); // Настройки remove_menu_page('edit-comments.php'); // Комментарии remove_menu_page('plugins.php'); // Плагины remove_menu_page('themes.php'); // Внешний вид // Убираем подпункты remove_submenu_page('index.php', 'update-core.php'); // Обновления } });

Упрощенный дашборд для клиента

php
add_action('wp_dashboard_setup', function() { $user = wp_get_current_user(); if (in_array('client', $user->roles)) { // Убираем все стандартные виджеты global $wp_meta_boxes; unset($wp_meta_boxes['dashboard']); // Добавляем только нужные виджеты wp_add_dashboard_widget( 'client_quick_links', 'Быстрые ссылки', function() { echo '
                <div style="padding: 10px;">
                    <h3>Что вы хотите сделать?</h3>
                    <ul>
                        <li>✏️ <a href="' . admin_url('post-new.php') . '">Добавить новость</a></li>
                        <li>🖼️ <a href="' . admin_url('upload.php') . '">Добавить фото</a></li>
                        <li>📊 <a href="' . admin_url('edit.php') . '">Посмотреть все новости</a></li>
                        <li>📞 <a href="' . admin_url('admin.php?page=contact') . '">Просмотреть заявки</a></li>
                    </ul>
                </div>'; } ); wp_add_dashboard_widget( 'client_support', 'Техническая поддержка', function() { echo '
                <div style="padding: 10px;">
                    <p><strong>Если что-то не работает:</strong></p>
                    <p>📧 Напишите на: support@вашастудия.ru</p>
                    <p>📞 Позвоните: 8-800-123-45-67</p>
                    <p>⏱️ Время работы: Пн-Пт, 9:00-18:00</p>
                </div>'; } ); } });

👥 2. Админка для команд

Ролевая модель для разных специалистов

Разные дашборды для разных ролей:

php
add_action('wp_dashboard_setup', function() { $user = wp_get_current_user(); // Для редакторов if (in_array('editor', $user->roles)) { wp_add_dashboard_widget( 'editor_stats', 'Статистика контента', function() { $posts_count = wp_count_posts('post')->publish; $pages_count = wp_count_posts('page')->publish; $drafts = wp_count_posts('post')->draft; echo "
                <div style='padding: 10px;'>
                    <p>📝 <strong>Опубликовано записей:</strong> {$posts_count}</p>
                    <p>📄 <strong>Страниц:</strong> {$pages_count}</p>
                    <p>📋 <strong>Черновиков:</strong> {$drafts}</p>
                    <p>📅 <strong>На этой неделе:</strong> " . get_posts_count_last_week() . "</p>
                </div>"; } ); } // Для маркетологов if (in_array('marketer', $user->roles)) { wp_add_dashboard_widget( 'marketing_tasks', 'Маркетинговые задачи', function() { echo '
                <div style="padding: 10px;">
                    <h4>Еженедельные задачи:</h4>
                    <ul>
                        <li><input type="checkbox"> Написать 2 статьи в блог</li>
                        <li><input type="checkbox"> Обновить соцсети</li>
                        <li><input type="checkbox"> Проверить SEO-метрики</li>
                        <li><input type="checkbox"> Проанализировать трафик</li>
                    </ul>
                </div>'; } ); } });

Система внутренних уведомлений для команды

php
// Простая система заметок между сотрудниками add_action('admin_notices', function() { $notes = get_option('team_notes', []); if (!empty($notes)) { foreach ($notes as $note) { if (current_user_can($note['for_role'])) { echo '
                <div class="notice notice-info">
                    <p><strong>Командная заметка:</strong> ' . esc_html($note['message']) . '</p>
                    <p><small>От: ' . esc_html($note['from']) . ' | ' . $note['date'] . '</small></p>
                </div>'; } } } }); // Функция для добавления заметок function add_team_note($message, $for_role = 'editor', $from = 'Система') { $notes = get_option('team_notes', []); $notes[] = [ 'message' => $message, 'for_role' => $for_role, 'from' => $from, 'date' => current_time('mysql') ]; update_option('team_notes', array_slice($notes, -10)); // Храним 10 последних }

🛠️ 3. Кастомизация редактора записей

Добавляем инструкции прямо в редактор

php
add_action('edit_form_after_title', function($post) { if ($post->post_type == 'post') { echo '
        <div style="background: #f0f8ff; padding: 15px; margin: 20px 0; border-left: 4px solid #0073aa;">
            <h3 style="margin-top: 0;">📝 Инструкция по заполнению</h3>
            <ol>
                <li>Заголовок должен быть не длиннее 70 символов</li>
                <li>Добавьте минимум 1 изображение в текст</li>
                <li>Заполните SEO-поля внизу страницы</li>
                <li>Выберите минимум 1 категорию</li>
                <li>Добавьте теги (3-5 штук)</li>
            </ol>
        </div>'; } });

Предустановленные шаблоны для разных типов контента

php
// Автозаполнение для определенных типов записей add_filter('default_content', function($content, $post) { if ($post->post_type == 'review') { $content = "## Плюсы\n- \n- \n\n## Минусы\n- \n- \n\n## Итог\n"; } elseif ($post->post_type == 'interview') { $content = "**Вопрос:** \n\n**Ответ:** \n\n---\n\n"; } return $content; }, 10, 2);

📊 4. Мониторинг и аналитика внутри админки

Дашборд с ключевыми метриками

php
add_action('wp_dashboard_setup', function() { wp_add_dashboard_widget( 'site_metrics', 'Ключевые метрики сайта', function() { // Пример с Google Analytics API (упрощенно) $metrics = get_transient('ga_metrics'); if (!$metrics) { // Здесь код получения данных из GA $metrics = [ 'users' => '1,234', 'sessions' => '2,345', 'bounce_rate' => '42%', 'top_page' => '/blog/post-title' ]; set_transient('ga_metrics', $metrics, HOUR_IN_SECONDS * 6); } echo '
            <div style="padding: 10px;">
                <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;">
                    <div style="background: #e3f2fd; padding: 10px; border-radius: 5px;">
                        <div style="font-size: 24px; font-weight: bold;">' . $metrics['users'] . '</div>
                        <div>Посетители (30 дней)</div>
                    </div>
                    <div style="background: #f3e5f5; padding: 10px; border-radius: 5px;">
                        <div style="font-size: 24px; font-weight: bold;">' . $metrics['sessions'] . '</div>
                        <div>Сессии</div>
                    </div>
                    <div style="background: #e8f5e9; padding: 10px; border-radius: 5px;">
                        <div style="font-size: 24px; font-weight: bold;">' . $metrics['bounce_rate'] . '</div>
                        <div>Отказы</div>
                    </div>
                    <div style="background: #fff3e0; padding: 10px; border-radius: 5px;">
                        <div style="font-size: 14px;"><strong>Популярная страница:</strong><br>' . $metrics['top_page'] . '</div>
                    </div>
                </div>
            </div>'; } ); });

Мониторинг задач и дедлайнов

php
// Простой трекер задач
add_action('admin_menu', function() {
    add_menu_page(
        'Задачи команды',
        'Задачи',
        'edit_posts',
        'team_tasks',
        function() {
            $tasks = get_option('team_tasks', []);
            ?>
            <div class="wrap"> <h1>Задачи команды</h1> <form method="post" style="margin-bottom: 20px;"> <input type="text" name="new_task" placeholder="Новая задача" style="width: 300px;"> <select name="task_assignee"> <option value="all">Всем</option> <option value="editor">Редактору</option> <option value="marketer">Маркетологу</option> </select> <input type="date" name="task_deadline"> <button type="submit" class="button button-primary">Добавить</button> </form> <table class="wp-list-table widefat fixed striped"> <thead> <tr> <th>Задача</th> <th>Исполнитель</th> <th>Дедлайн</th> <th>Статус</th> </tr> </thead> <tbody> <?php foreach ($tasks as $task): ?> <tr> <td><?php echo esc_html($task['text']); ?></td> <td><?php echo esc_html($task['assignee']); ?></td> <td><?php echo esc_html($task['deadline']); ?></td> <td><input type="checkbox" <?php checked($task['done']); ?>></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php
        },
        'dashicons-checklist',
        30
    );
});

🔐 5. Безопасность и контроль для клиентов

Ограничение возможностей с учетом ролей

php
// Запрещаем клиентам менять тему и плагины add_action('admin_init', function() { $user = wp_get_current_user(); if (in_array('client', $user->roles)) { // Запрет на установку плагинов define('DISALLOW_FILE_MODS', true); // Скрываем обновления add_filter('pre_site_transient_update_core', '__return_null'); add_filter('pre_site_transient_update_plugins', '__return_null'); // Запрет на редактирование темы define('DISALLOW_FILE_EDIT', true); } });

Ведение лога действий клиента

php
// Логирование действий в админке add_action('all', function($hook) { $user = wp_get_current_user(); // Логируем только действия клиентов if (in_array('client', $user->roles) && is_admin()) { $log_entry = [ 'user' => $user->user_login, 'hook' => $hook, 'time' => current_time('mysql'), 'url' => $_SERVER['REQUEST_URI'] ]; $logs = get_option('client_activity_log', []); $logs[] = $log_entry; // Храним только последние 100 записей if (count($logs) > 100) { $logs = array_slice($logs, -100); } update_option('client_activity_log', $logs); } });

🎨 6. Брендирование админки для клиента

Кастомизация под бренд клиента

php
add_action('admin_head', function() { $client_logo = get_option('client_admin_logo'); if ($client_logo) { echo '
        <style>
            #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before {
                background-image: url(' . esc_url($client_logo) . ') !important;
                background-size: contain;
                background-repeat: no-repeat;
                background-position: center;
                content: "" !important;
                width: 20px;
                height: 20px;
            }
            
            .login h1 a {
                background-image: url(' . esc_url($client_logo) . ') !important;
                background-size: contain;
                width: 200px !important;
                height: 100px !important;
                background-position: center;
            }
        </style>'; } // Брендовые цвета $primary_color = get_option('client_primary_color', '#0073aa'); echo "
    <style>
        :root {
            --client-primary: {$primary_color};
        }
        
        #adminmenu .wp-has-current-submenu .wp-submenu,
        #adminmenu .wp-has-current-submenu.opensub .wp-submenu,
        #adminmenu .wp-submenu {
            background: {$primary_color}10;
        }
        
        .wp-core-ui .button-primary {
            background: {$primary_color};
            border-color: {$primary_color};
        }
    </style>"; });

📱 7. Мобильная админка для работы с телефона

php
// Адаптация для мобильных устройств add_action('admin_head', function() { echo '
    <style>
        @media (max-width: 782px) {
            /* Увеличиваем кнопки для тапов */
            .wp-core-ui .button {
                min-height: 40px;
                padding: 10px 15px;
            }
            
            /* Упрощаем таблицы */
            .wp-list-table tr {
                display: block;
                margin-bottom: 15px;
                border: 1px solid #ddd;
            }
            
            /* Крупные чекбоксы */
            input[type="checkbox"] {
                width: 24px;
                height: 24px;
            }
            
            /* Гибкое меню */
            #adminmenu {
                font-size: 16px;
            }
            
            #adminmenu li a {
                padding: 15px;
            }
        }
    </style>'; });

🔧 8. Быстрые действия и шорткоды

Панель быстрых действий в админке

php
add_action('admin_footer', function() { if (is_admin()) { echo '
        <div id="quick-actions-panel" style="position: fixed; right: 20px; bottom: 20px; z-index: 9999;">
            <button onclick="toggleQuickPanel()" style="background: #0073aa; color: white; border: none; border-radius: 50%; width: 50px; height: 50px; font-size: 24px; cursor: pointer;">
                ⚡
            </button>
            <div id="quick-panel-content" style="display: none; position: absolute; bottom: 60px; right: 0; background: white; border: 1px solid #ddd; border-radius: 5px; padding: 15px; width: 250px; box-shadow: 0 5px 15px rgba(0,0,0,0.1);">
                <h4 style="margin-top: 0;">Быстрые действия</h4>
                <ul style="list-style: none; padding: 0; margin: 0;">
                    <li><a href="' . admin_url('post-new.php') . '" style="display: block; padding: 8px 0;">➕ Новая запись</a></li>
                    <li><a href="' . admin_url('upload.php') . '" style="display: block; padding: 8px 0;">🖼️ Загрузить фото</a></li>
                    <li><a href="' . admin_url('admin.php?page=stats') . '" style="display: block; padding: 8px 0;">📊 Статистика</a></li>
                    <li><a href="' . admin_url('edit.php?post_status=draft') . '" style="display: block; padding: 8px 0;">📝 Черновики</a></li>
                </ul>
            </div>
        </div>
        <script>
            function toggleQuickPanel() {
                var panel = document.getElementById("quick-panel-content");
                panel.style.display = panel.style.display === "none" ? "block" : "none";
            }
        </script>'; } });

📋 Чек-лист настройки админки

Для клиента:

  • Убрать лишние пункты меню

  • Создать упрощенный дашборд

  • Добавить инструкции в редактор

  • Настроить брендинг (лого, цвета)

  • Ограничить опасные действия

Для команды:

  • Настроить ролевые дашборды

  • Добавить систему уведомлений

  • Создать трекер задач

  • Внедрить мониторинг метрик

  • Настроить мобильную адаптацию

🚀 Быстрый старт

Если нужно быстро настроить админку, используйте плагины:

  1. Admin Menu Editor — визуальный редактор меню

  2. Dashboard Widgets Suite — готовые виджеты

  3. White Label CMS — брендирование админки

  4. User Role Editor — тонкая настройка прав

💡 Золотые правила

  1. Не перегружайте — лучше меньше, но релевантнее

  2. Тестируйте на реальных пользователях — спросите, что им удобно

  3. Добавляйте постепенно — не все сразу

  4. Оставляйте лазейки — скрытые ссылки для разработчиков

  5. Документируйте изменения — чтобы не забыть, зачем что добавлено

🎯 Итог

Хорошо настроенная админка WordPress — это не просто красивый интерфейс. Это:

  • Для клиента: Уверенность, что он ничего не сломает

  • Для команды: Эффективность и прозрачность работы

  • Для вас: Меньше вопросов «как это сделать» и меньше ошибок

Начните с малого: уберите 2-3 лишних пункта меню и добавьте один полезный виджет на дашборд. Уже это сделает работу в разы удобнее!