← Назад к вопросам

Можно ли вставить в WordPress готовый компонент написанный на React?

2.0 Middle🔥 202 комментариев
#React#Архитектура и паттерны

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Да, в WordPress можно вставить готовый React-компонент. Это распространённая практика, особенно в современных разработках, где WordPress используется как headless CMS или когда необходимо добавить интерактивный, динамичный элемент на традиционный сайт.

Есть несколько подходов, каждый со своими преимуществами и сложностью. Вот основные методы интеграции.

1. Использование плагина "WP Scripts" и настройка кастомного блока Gutenberg

Это самый современный и "правильный" способ для глубокой интеграции. Вы создаёте кастомный блок для редактора Gutenberg, используя официальный инструмент @wordpress/scripts.

Как это работает:

  • Вы разрабатываете React-компонент в изолированной среде.
  • С помощью WP Scripts проект собирается в бандл, совместимый с WordPress.
  • Компонент регистрируется как новый блок, который затем появляется в меню редактора.

Примерная структура кода блока:

// index.js вашего блока
import { registerBlockType } from '@wordpress/blocks';
import { useBlockProps } from '@wordpress/block-editor';

// Импортируем ваш React-компонент
import MyReactComponent from './components/MyReactComponent';

registerBlockType('my-namespace/my-react-block', {
    title: 'Мой React компонент',
    icon: 'smiley',
    category: 'widgets',

    edit: () => {
        const blockProps = useBlockProps();
        return (
            <div {...blockProps}>
                <MyReactComponent message="Редактор WordPress" />
            </div>
        );
    },

    save: () => {
        const blockProps = useBlockProps.save();
        return (
            <div {...blockProps}>
                {/* Контент рендерится на сервере через PHP */}
                <div id="my-react-component-root"></div>
            </div>
        );
    },
});

Затем в PHP-файле блока вам нужно будет инициализировать компонент на фронтенде.

2. Добавление компонента через шорткод (Shortcode)

Это более классический и гибкий метод, если компонент не нуждается в интеграции с редактором.

Алгоритм:

  1. Собрать React-приложение (обычно один корневой компонент) в отдельные JS-файлы (напр., my-app.js и my-app.css).
  2. Зарегистрировать и подключить эти файлы в WordPress через wp_enqueue_script() и wp_enqueue_style().
  3. Создать PHP-шорткод, который выводит HTML-контейнер с уникальным id.
  4. Ваш React-компонент при загрузке "монтируется" в этот контейнер.

Пример PHP-кода для functions.php:

// Регистрация скрипта и стилей
function my_react_component_assets() {
    wp_enqueue_script(
        'my-react-app',
        get_template_directory_uri() . '/build/static/js/main.js', // Путь к собранному React-скрипту
        array(), // Зависимости
        '1.0.0',
        true // Подключить в футере
    );
    wp_enqueue_style(
        'my-react-app-style',
        get_template_directory_uri() . '/build/static/css/main.css'
    );
}
add_action('wp_enqueue_scripts', 'my_react_component_assets');

// Создание шорткода [my_react_app]
function my_react_component_shortcode() {
    return '<div id="my-react-root"></div>';
}
add_shortcode('my_react_app', 'my_react_component_shortcode');

Теперь на любой странице или в записи можно вставить [my_react_app].

3. Использование как часть темы или виджета

Вы можете встроить компонент напрямую в шаблон темы (header.php, footer.php, page-template.php). Метод аналогичен шорткоду: подключить скрипты и вывести корневой div в нужном месте.

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

Ключевые технические аспекты и подводные камни

  • Изоляция и конфликты: React, подключенный вами, может конфликтовать с другой версией React из ядра WordPress (которое использует Preact в административной части). Важно использовать инкапсуляцию (например, через веб-компоненты) или тщательно контролировать зависимости. Для блоков Gutenberg эта проблема решена архитектурно.
  • Сборка и зависимости: Вам понадобится среда сборки (Webpack, Vite). Для разработки кастомных блоков @wordpress/scripts предоставляет готовую конфигурацию. Для изолированного компонента можно использовать create-react-app или аналоги.
  • Обработка данных: React-компоненту, скорее всего, нужны данные. Для их получения можно использовать:
    *   **REST API WordPress** (наиболее типично для headless-подхода).
    *   **GraphQL** (с помощью плагина WPGraphQL).
    *   Встроить данные в HTML-атрибуты контейнера через `data-*` атрибуты из PHP.
  • Производительность: Большая JS-библиотека может замедлить загрузку страницы. Используйте ленивую загрузку (dynamic imports), разделение кода (code splitting) и подключайте скрипты только на нужных страницах.

Резюме: Вставить готовый React-компонент в WordPress не только можно, но и часто делается. Выбор метода зависит от задачи:

  • Для интерактивных элементов внутри контента — создавайте кастомный блок Gutenberg.
  • Для самостоятельных виджетов или элементов в шаблоне — используйте шорткоды или прямое внедрение в тему.
  • Для полного SPA-интерфейса — используйте WordPress как headless CMS, где React-приложение работает отдельно и запрашивает данные через API.