Модифицируем админку WordPress: лайфхаки для клиентов и команд
Админка WordPress — это рабочее пространство. И как любое рабочее пространство, её можно организовать под конкретные задачи. Вот как превратить стандартную админку в удобный инструмент для клиентов или эффективную среду для команды.
🎯 1. Адаптация админки для клиентов
Создание интуитивного интерфейса для не-технических пользователей
Проблема: Клиент путается в меню, не находит нужные настройки, случайно что-то ломает.
Решение: Создаем «клиентский режим»
// В 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'); // Обновления } });
Упрощенный дашборд для клиента
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. Админка для команд
Ролевая модель для разных специалистов
Разные дашборды для разных ролей:
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>'; } ); } });
Система внутренних уведомлений для команды
// Простая система заметок между сотрудниками 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. Кастомизация редактора записей
Добавляем инструкции прямо в редактор
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>'; } });
Предустановленные шаблоны для разных типов контента
// Автозаполнение для определенных типов записей 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. Мониторинг и аналитика внутри админки
Дашборд с ключевыми метриками
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>'; } ); });
Мониторинг задач и дедлайнов
// Простой трекер задач
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. Безопасность и контроль для клиентов
Ограничение возможностей с учетом ролей
// Запрещаем клиентам менять тему и плагины 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); } });
Ведение лога действий клиента
// Логирование действий в админке 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. Брендирование админки для клиента
Кастомизация под бренд клиента
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. Мобильная админка для работы с телефона
// Адаптация для мобильных устройств 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. Быстрые действия и шорткоды
Панель быстрых действий в админке
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>'; } });
📋 Чек-лист настройки админки
Для клиента:
- Убрать лишние пункты меню
- Создать упрощенный дашборд
- Добавить инструкции в редактор
- Настроить брендинг (лого, цвета)
- Ограничить опасные действия
Для команды:
- Настроить ролевые дашборды
- Добавить систему уведомлений
- Создать трекер задач
- Внедрить мониторинг метрик
- Настроить мобильную адаптацию
🚀 Быстрый старт
Если нужно быстро настроить админку, используйте плагины:
- Admin Menu Editor — визуальный редактор меню
- Dashboard Widgets Suite — готовые виджеты
- White Label CMS — брендирование админки
- User Role Editor — тонкая настройка прав
💡 Золотые правила
- Не перегружайте — лучше меньше, но релевантнее
- Тестируйте на реальных пользователях — спросите, что им удобно
- Добавляйте постепенно — не все сразу
- Оставляйте лазейки — скрытые ссылки для разработчиков
- Документируйте изменения — чтобы не забыть, зачем что добавлено
🎯 Итог
Хорошо настроенная админка WordPress — это не просто красивый интерфейс. Это:
- Для клиента: Уверенность, что он ничего не сломает
- Для команды: Эффективность и прозрачность работы
- Для вас: Меньше вопросов «как это сделать» и меньше ошибок
Начните с малого: уберите 2-3 лишних пункта меню и добавьте один полезный виджет на дашборд. Уже это сделает работу в разы удобнее!