Как создать иерархию виджетов в WordPress с помощью кода

|

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

Что такое иерархия виджетов и зачем она нужна

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

Кроме того, иерархия виджетов позволяет создавать комплексные интерфейсы без использования тяжелых плагинов, полностью контролируя логику и отображение.

В стандартном WordPress такой возможности нет, поэтому придётся написать собственный код.

Основные подходы к созданию иерархии виджетов

Есть несколько способов реализовать такую иерархию:

Мы рассмотрим комбинированный подход с кастомными виджетами и AJAX, чтобы обеспечить динамическое обновление.

Создаем базовый каркас для иерархического виджета

Для начала создадим класс виджета, который поддерживает связь с дочерними виджетами.

class WPHierarchy_Widget_Parent extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wphierarchy_widget_parent',
            'WPHierarchy Родительский Виджет',
            ['description' => 'Виджет, управляющий дочерними виджетами']
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo '<div id="wphierarchy-parent-widget">';
        echo '<h3>Выберите категорию:</h3>';
        // Пример выбора категории
        echo '<select id="wphierarchy-category-select">';
        echo '<option value="all">Все</option>';
        echo '<option value="news">Новости</option>';
        echo '<option value="events">События</option>';
        echo '</select>';
        echo '</div>';
        echo $args['after_widget'];
    }

    public function form($instance) {
        // Настройки виджета (если нужны)
    }

    public function update($new_instance, $old_instance) {
        return $new_instance;
    }
}

Этот виджет выводит простой селектор категорий. Его задача — выступить родителем и передавать выбранное значение дочерним виджетам.

Создаем дочерний виджет с динамическим обновлением

Дочерний виджет будет принимать выбор родителя и показывать соответствующий контент.

class WPHierarchy_Widget_Child extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wphierarchy_widget_child',
            'WPHierarchy Дочерний Виджет',
            ['description' => 'Виджет, показывающий контент в зависимости от выбора родителя']
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo '<div id="wphierarchy-child-widget">';
        echo '<h3>Контент по категории</h3>';
        echo '<div id="wphierarchy-child-content">Выберите категорию в родительском виджете</div>';
        echo '</div>';
        echo $args['after_widget'];
        // Включаем скрипт для AJAX
        wp_enqueue_script('wphierarchy-widget', plugin_dir_url(__FILE__) . 'wphierarchy-widget.js', ['jquery'], null, true);
        wp_localize_script('wphierarchy-widget', 'wphierarchy_ajax', [
            'ajax_url' => admin_url('admin-ajax.php'),
        ]);
    }

    public function form($instance) {
        // Настройки дочернего виджета
    }

    public function update($new_instance, $old_instance) {
        return $new_instance;
    }
}

JavaScript для передачи выбора родителя дочернему виджету

Создайте файл wphierarchy-widget.js с таким содержимым:

jQuery(document).ready(function($) {
    $('#wphierarchy-category-select').on('change', function() {
        var category = $(this).val();
        $.ajax({
            url: wphierarchy_ajax.ajax_url,
            method: 'POST',
            data: {
                action: 'wphierarchy_get_child_content',
                category: category
            },
            success: function(response) {
                $('#wphierarchy-child-content').html(response.data);
            }
        });
    });
});

Обработка AJAX запроса в functions.php или плагине

add_action('wp_ajax_wphierarchy_get_child_content', 'wphierarchy_handle_child_content');
add_action('wp_ajax_nopriv_wphierarchy_get_child_content', 'wphierarchy_handle_child_content');

function wphierarchy_handle_child_content() {
    $category = isset($_POST['category']) ? sanitize_text_field($_POST['category']) : '';

    // Здесь формируем контент в зависимости от категории
    switch ($category) {
        case 'news':
            $content = '<p>Показаны последние новости.</p>';
            break;
        case 'events':
            $content = '<p>Список предстоящих событий.</p>';
            break;
        default:
            $content = '<p>Общая информация по всем категориям.</p>';
    }

    wp_send_json_success($content);
}

Регистрация виджетов и подключение скриптов

Чтобы виджеты работали, зарегистрируйте их в хуке widgets_init:

add_action('widgets_init', function() {
    register_widget('WPHierarchy_Widget_Parent');
    register_widget('WPHierarchy_Widget_Child');
});

Также убедитесь, что JavaScript файл wphierarchy-widget.js находится в правильной директории и корректно подключается.

Как использовать иерархию виджетов на практике

1. Добавьте оба виджета в один сайдбар или область виджетов вашей темы.

2. В родительском виджете выберите нужную категорию из селектора.

3. Дочерний виджет автоматически обновит свой контент через AJAX, показывая информацию, соответствующую выбранной категории.

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

Примеры расширения: интеграция с плагином Clearfy Pro

Если вы используете Clearfy Pro, можно повысить безопасность AJAX-запросов, добавив nonce-проверку:

wp_localize_script('wphierarchy-widget', 'wphierarchy_ajax', [
    'ajax_url' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('wphierarchy_nonce')
]);

И в обработчике:

function wphierarchy_handle_child_content() {
    check_ajax_referer('wphierarchy_nonce', 'security');
    // остальной код
}

Выводы и рекомендации

Создание иерархии виджетов в WordPress — задача сложная, но выполнимая с помощью собственных классов, AJAX и JavaScript. Такой подход даёт гибкость и позволяет создавать более сложные интерфейсы без сторонних тяжеловесных плагинов.

Рекомендуется тщательно тестировать взаимодействие виджетов и использовать средства безопасности, такие как nonce. Также можно использовать кэширование, если данные не меняются часто.

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

Динамическая иерархия пользователей WordPress с поддержкой REST API
22.03.2026
Как создать иерархию для пользовательских метаполей в WordPress
01.02.2026
Создать пирамиду категорий в WordPress с помощью кода
21.01.2026
Как сделать иерархию записей с поддержкой разных типов постов в WordPress
05.02.2026
WooCommerce: автоматическое установление родительской категории при импорте товаров
08.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее