Замена редактора

Как переключить редактор WordPress в один клик

⚙️ «Как переключить редактор WordPress в один клик: история о гибкости»

Авторы: Ведерников Сергей & ИИ Дэп

Помните, как в 2018 году в WordPress появился Гутенберг? Для многих это стало шоком. Кто-то обрадовался новому блочному редактору, а кто-то до сих пор пишет в старом добром TinyMCE. Я оказался во втором лагере.

Проблема была в том, что возврат к классическому редактору часто означал либо установку «тяжелого» плагина с кучей лишних настроек, либо полный отказ от Гутенберга без возможности быстрого переключения обратно. Мне нужно было решение, которое позволяло бы мгновенно переключаться между редакторами, без лишних телодвижений. Так родился плагин переключения редакторов.

🎯 Что делает плагин

Этот плагин — максимально простое решение для управления редакторами в WordPress. Он не заставляет тебя выбирать «навсегда». В любой момент ты можешь зайти в настройки и включить тот редактор, который удобен прямо сейчас.

В отличие от официального плагина Classic Editor, который требует выбора редактора по умолчанию на уровне настроек, наш плагин даёт возможность переключаться на лету. И вот что важно — он включает автоматическую перезагрузку страницы после сохранения, чтобы настройки точно применились. Никаких «очисти кэш» или «перезайди в админку».

💡 Секрет удобства

Главная фишка плагина — кнопка быстрого доступа прямо в админке. Тебе не нужно искать настройки в глубинах меню. Просто нажал «⚡ Редактор» в верхней панели и переключился.

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

📦 Для кого это

  • Для тех, кто привык к классическому редактору, но иногда хочет попробовать блоки.

  • Для разработчиков, которым нужно тестировать контент в разных редакторах.

  • Для всех, кто устал от негибкости стандартных решений.

Этот плагин — напоминание о том, что WordPress должен подстраиваться под пользователя, а не наоборот. И что даже в мире, где все переходят на блоки, у тебя всегда есть выбор.

Код плагина:

🐘 PHP
<?php
/**
 * Plugin Name: ModernGrid Editor Switcher
 * Description: По умолчанию — классический редактор и виджеты. Гутенберг — по желанию.
 * Version: 2.0
 * Author: Ведерников Сергей и ИИ ДЭП
 */

// Безопасность
if (!defined('ABSPATH')) {
    exit;
}

// При активации плагина ставим классику по умолчанию
function moderngrid_switcher_activate() {
    if (!get_option('moderngrid_editor_mode')) {
        update_option('moderngrid_editor_mode', 'classic');
    }
    if (!get_option('moderngrid_widgets_mode')) {
        update_option('moderngrid_widgets_mode', 'classic');
    }
}
register_activation_hook(__FILE__, 'moderngrid_switcher_activate');

// Добавляем пункт меню
function moderngrid_switcher_menu() {
    add_options_page(
        'Переключатель редактора',
        '⚡ Редактор ModernGrid',
        'manage_options',
        'moderngrid-switcher',
        'moderngrid_switcher_page'
    );
}
add_action('admin_menu', 'moderngrid_switcher_menu');

// Страница с переключателями
function moderngrid_switcher_page() {
    ?>
    <div class="wrap">
        <style>
            .mg-card {
                background: #fff;
                border: 1px solid #ccd0d4;
                border-radius: 8px;
                padding: 20px 25px;
                margin: 20px 0;
                box-shadow: 0 1px 3px rgba(0,0,0,.08);
            }
            .mg-badge {
                display: inline-block;
                padding: 4px 14px;
                border-radius: 30px;
                font-size: 13px;
                font-weight: 600;
            }
            .mg-badge-classic {
                background: #cce5ff;
                color: #004085;
            }
            .mg-badge-gutenberg {
                background: #d4edda;
                color: #155724;
            }
            .mg-radio-group {
                margin: 12px 0;
            }
            .mg-radio-group label {
                display: block;
                padding: 10px 15px;
                margin-bottom: 6px;
                background: #f8f9fa;
                border-radius: 6px;
                border-left: 4px solid transparent;
                transition: all 0.2s;
                cursor: pointer;
            }
            .mg-radio-group label:hover {
                background: #e9ecef;
            }
            .mg-radio-group input[type="radio"]:checked + span {
                font-weight: 600;
            }
            .mg-radio-group label:has(input:checked) {
                border-left-color: #2271b1;
                background: #f0f6fc;
            }
            .mg-desc {
                color: #666;
                font-size: 13px;
                margin-left: 26px;
            }
        </style>

        <h1>⚡ Переключатель редактора ModernGrid</h1>
        <p>Управляй редакторами в один клик.</p>

        <?php
        if (isset($_POST['moderngrid_editor_submit'])) {
            check_admin_referer('moderngrid_editor_nonce');
            
            $editor_mode = sanitize_text_field($_POST['editor_mode']);
            $widgets_mode = sanitize_text_field($_POST['widgets_mode']);
            
            update_option('moderngrid_editor_mode', $editor_mode);
            update_option('moderngrid_widgets_mode', $widgets_mode);
            
            echo '<div class="notice notice-success is-dismissible"><p>✅ Настройки сохранены!</p></div>';
        }
        
        $current_editor = get_option('moderngrid_editor_mode', 'classic');
        $current_widgets = get_option('moderngrid_widgets_mode', 'classic');
        ?>

        <!-- Статус -->
        <div class="mg-card">
            <h3>📊 Текущее состояние</h3>
            <p>
                <strong>Редактор:</strong>
                <span class="mg-badge <?php echo $current_editor === 'classic' ? 'mg-badge-classic' : 'mg-badge-gutenberg'; ?>">
                    <?php echo $current_editor === 'classic' ? '📝 Классический' : '🧩 Гутенберг'; ?>
                </span>
                  |  
                <strong>Виджеты:</strong>
                <span class="mg-badge <?php echo $current_widgets === 'classic' ? 'mg-badge-classic' : 'mg-badge-gutenberg'; ?>">
                    <?php echo $current_widgets === 'classic' ? '📦 Классические' : '🧩 Блочные'; ?>
                </span>
            </p>
        </div>

        <!-- Переключатели -->
        <div class="mg-card">
            <h3>🔀 Выбери редактор</h3>
            <form method="post">
                <?php wp_nonce_field('moderngrid_editor_nonce'); ?>
                
                <h4>📝 Редактор записей</h4>
                <div class="mg-radio-group">
                    <label>
                        <input type="radio" name="editor_mode" value="classic" <?php checked($current_editor, 'classic'); ?>>
                        <span>📝 Классический редактор</span>
                        <div class="mg-desc">Привычный TinyMCE, метабоксы, никаких блоков</div>
                    </label>
                    <label>
                        <input type="radio" name="editor_mode" value="gutenberg" <?php checked($current_editor, 'gutenberg'); ?>>
                        <span>🧩 Гутенберг (блочный)</span>
                        <div class="mg-desc">Современный редактор с блоками и шаблонами</div>
                    </label>
                </div>

                <h4>🧩 Виджеты</h4>
                <div class="mg-radio-group">
                    <label>
                        <input type="radio" name="widgets_mode" value="classic" <?php checked($current_widgets, 'classic'); ?>>
                        <span>📦 Классические виджеты</span>
                        <div class="mg-desc">Привычный интерфейс с перетаскиванием</div>
                    </label>
                    <label>
                        <input type="radio" name="widgets_mode" value="block" <?php checked($current_widgets, 'block'); ?>>
                        <span>🧩 Блочные виджеты</span>
                        <div class="mg-desc">Новые виджеты с блоками Гутенберга</div>
                    </label>
                </div>
                
                <p class="submit">
                    <input type="submit" name="moderngrid_editor_submit" class="button button-primary" value="💾 Сохранить настройки">
                </p>
            </form>
        </div>

        <p style="color: #666; font-size: 13px;">
            ⚡ <strong>По умолчанию</strong> включены классический редактор и классические виджеты.<br>
            🔄 При переключении на Гутенберг он будет работать для всех записей и виджетов.
        </p>
    </div>
    <?php
}

// ============================================
// ПРИМЕНЯЕМ НАСТРОЙКИ
// ============================================

function moderngrid_apply_editor_settings() {
    $editor_mode = get_option('moderngrid_editor_mode', 'classic');
    $widgets_mode = get_option('moderngrid_widgets_mode', 'classic');
    
    // Если выбрана классика — отключаем Гутенберг
    if ($editor_mode === 'classic') {
        add_filter('use_block_editor_for_post', '__return_false', 10, 2);
        add_filter('use_block_editor_for_post_type', '__return_false', 10, 2);
    }
    
    // Если выбраны классические виджеты — отключаем блочные
    if ($widgets_mode === 'classic') {
        add_filter('gutenberg_use_widgets_block_editor', '__return_false');
        add_filter('use_widgets_block_editor', '__return_false');
    }
}
add_action('init', 'moderngrid_apply_editor_settings');

// ============================================
// ЯРЛЫК В ВЕРХНЕЙ ПАНЕЛИ
// ============================================

function moderngrid_admin_bar_switcher($admin_bar) {
    $admin_bar->add_menu(array(
        'id'    => 'moderngrid-switcher',
        'title' => '⚡ Редактор',
        'href'  => admin_url('options-general.php?page=moderngrid-switcher'),
        'meta'  => array(
            'title' => 'Переключить редактор',
        ),
    ));
}
add_action('admin_bar_menu', 'moderngrid_admin_bar_switcher', 999);

Скачать архив

Оставить комментарий

Ваш email не будет опубликован.

🧮 Проверка безопасности
6 - 6 = ?