Как создать динамические иконки в WordPress на основе REST API и React

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

Что такое REST API в WordPress и зачем он нужен для иконок

WordPress с версии 4.7 включает встроенный REST API — мощный инструмент для обмена данными между клиентом и сервером. REST API позволяет получить, создать, обновить или удалить данные с помощью HTTP-запросов в формате JSON.

Для динамических иконок REST API предоставляет возможность получать данные, например, настройки иконок, статусы или пользовательские параметры, и отображать их на фронтенде без перезагрузки страницы. В сочетании с React можно создать современный интерфейс, который будет быстро реагировать на изменения данных.

Создаем собственный REST API эндпоинт для иконок

Первым шагом создадим кастомный REST API маршрут в WordPress, который будет возвращать данные для иконок. Добавьте следующий код в functions.php вашей темы или в плагин:

add_action('rest_api_init', function () {
    register_rest_route('wpicons/v1', '/icons', array(
        'methods' => 'GET',
        'callback' => 'wpicons_get_icons_data',
        'permission_callback' => '__return_true',
    ));
});

function wpicons_get_icons_data() {
    // Пример данных: можно заменить на динамическую выборку из БД
    $icons = array(
        array('id' => 1, 'name' => 'home', 'svg' => '<svg>...</svg>'),
        array('id' => 2, 'name' => 'user', 'svg' => '<svg>...</svg>'),
        array('id' => 3, 'name' => 'settings', 'svg' => '<svg>...</svg>'),
    );
    return rest_ensure_response($icons);
}

Этот код регистрирует маршрут /wp-json/wpicons/v1/icons, который возвращает массив иконок с их SVG-кодом. В реальном проекте данные можно хранить в опциях, пользовательских типах записей или ACF полях.

Создаем React-компонент для отображения иконок

Теперь создадим React-компонент, который будет получать иконки из нашего API и отображать их динамически. Если у вас нет готового React-окружения, рекомендуем использовать Create React App или встроить React в тему через wp_enqueue_script с babel.

import React, { useEffect, useState } from 'react';

function WpiconsDynamicIcons() {
  const [icons, setIcons] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    fetch('/wp-json/wpicons/v1/icons')
      .then(response => {
        if (!response.ok) throw new Error('Ошибка загрузки данных');
        return response.json();
      })
      .then(data => {
        setIcons(data);
        setLoading(false);
      })
      .catch(err => {
        setError(err.message);
        setLoading(false);
      });
  }, []);

  if (loading) return <p>Загрузка иконок...</p>;
  if (error) return <p>Ошибка: {error}</p>;

  return (
    <div className="wpicons-icons-container">
      {icons.map(icon => (
        <div key={icon.id} className="wpicons-icon" dangerouslySetInnerHTML={{ __html: icon.svg }} />
      ))}
    </div>
  );
}

export default WpiconsDynamicIcons;

В этом компоненте мы делаем GET-запрос к нашему эндпоинту, получаем массив иконок и рендерим каждую иконку, вставляя SVG прямо в DOM через dangerouslySetInnerHTML. Это удобно для динамического отображения SVG без дополнительных файлов.

Интеграция React-компонента в WordPress

Есть несколько способов подключить React к WordPress. Если вы используете классическую тему без сборщиков, можно подключить скомпилированный React скрипт через wp_enqueue_script. Например:

function wpicons_enqueue_scripts() {
    wp_enqueue_script(
        'wpicons-react-app',
        get_template_directory_uri() . '/js/wpicons-react-app.js',
        array('wp-element'), // wp-element включает React и ReactDOM
        '1.0',
        true
    );
}
add_action('wp_enqueue_scripts', 'wpicons_enqueue_scripts');

После этого в нужном месте темы (например, в page.php) добавьте контейнер для React приложения:

<div id="wpicons-react-root"></div>

И в вашем React коде инициализируйте рендер:

import React from 'react';
import { createRoot } from 'react-dom/client';
import WpiconsDynamicIcons from './WpiconsDynamicIcons';

const root = createRoot(document.getElementById('wpicons-react-root'));
root.render(<WpiconsDynamicIcons />);

Работа с динамическими изменениями иконок

Чтобы делать иконки по-настоящему динамическими, можно расширить REST API, добавив возможность обновлять данные иконок или получать их в зависимости от параметров. Например, фильтры по категории иконок или пользовательские настройки.

Также можно добавить переходы и анимации для иконок на React-стороне с помощью CSS или библиотек анимаций, например, Framer Motion.

Пример расширенного REST API с параметрами

Добавим параметр category для фильтрации иконок:

add_action('rest_api_init', function () {
    register_rest_route('wpicons/v1', '/icons', array(
        'methods' => 'GET',
        'callback' => 'wpicons_get_icons_data_filtered',
        'permission_callback' => '__return_true',
        'args' => array(
            'category' => array(
                'required' => false,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param);
                }
            ),
        ),
    ));
});

function wpicons_get_icons_data_filtered(WP_REST_Request $request) {
    $category = $request->get_param('category');

    // Здесь логика фильтрации иконок по категории
    $all_icons = array(
        array('id' => 1, 'name' => 'home', 'category' => 'navigation', 'svg' => '<svg>...</svg>'),
        array('id' => 2, 'name' => 'user', 'category' => 'users', 'svg' => '<svg>...</svg>'),
        array('id' => 3, 'name' => 'settings', 'category' => 'settings', 'svg' => '<svg>...</svg>'),
    );

    if ($category) {
        $filtered = array_filter($all_icons, function($icon) use ($category) {
            return $icon['category'] === $category;
        });
        return rest_ensure_response(array_values($filtered));
    }

    return rest_ensure_response($all_icons);
}

Соответственно, в React можно передавать параметр в fetch, чтобы загружать нужные иконки.

Полезные плагины для работы с иконками и REST API

Для расширения функционала можно использовать плагины:

  • Clearfy Pro — для оптимизации и контроля загрузки скриптов и иконок.
  • Advanced Custom Fields (ACF) — для удобного управления метаданными иконок и интеграции с REST API.
  • WPRemark — помогает создавать и управлять SVG иконками в админке.

Например, с ACF можно создать группу полей для иконок и автоматически выводить их через REST API, что значительно упрощает управление контентом.

Заключение по теме динамических иконок на REST API и React

Использование REST API совместно с React даёт гибкость и мощь для создания динамических иконок в WordPress. Вы получаете возможность загружать и обновлять иконки без перезагрузки страницы, создавать уникальные пользовательские интерфейсы и легко расширять функционал.

Реализуя собственные REST маршруты и React-компоненты, вы контролируете весь процесс и можете адаптировать решение под любые задачи. Рекомендуется также изучить WPGraphQL, если вам нужен более сложный API, и использовать современные инструменты сборки для React.

При необходимости автоматизировать создание иконок и их загрузку можно обратить внимание на инструменты и плагины из экосистемы WPSHOP.

Как создать динамические иконки с вариантами доступа в WordPress
05.02.2026
Как создать динамические иконки для уведомлений в админ-панели WordPress
19.03.2026
Как добавить анимации для иконок в WordPress с помощью CSS и JavaScript
05.01.2026
Как создать динамические иконки в WordPress
18.11.2025
Создание динамических иконок для статусов публикаций в WordPress
13.03.2026