Как создать блок для вставки кода с подсветкой синтаксиса в WordPress

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

Почему нужен собственный блок для кода? Преимущества и возможности

Стандартный блок "Код" в редакторе Gutenberg довольно ограничен: он не поддерживает подсветку синтаксиса и не всегда удобно настраивается под разные языки программирования. Создание собственного блока позволяет:

  • Добавлять подсветку синтаксиса с помощью библиотек Prism.js, Highlight.js или других;
  • Выбирать язык программирования с помощью выпадающего списка;
  • Настраивать стили отображения кода;
  • Обеспечивать совместимость с темой сайта и плагинами;
  • Улучшать UX автора и читателя.

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

Выбор библиотеки для подсветки синтаксиса

Для подсветки кода можно использовать разные JavaScript-библиотеки. Наиболее популярные:

  • Prism.js — лёгкая, модульная, поддерживает множество языков, легко кастомизируется.
  • Highlight.js — автоматически определяет язык, большой набор стилей, широко используется.
  • CodeMirror — мощный редактор с подсветкой, подходит для сложных редакторов.

Для простого блока с подсветкой чаще всего выбирают Prism.js из-за простоты интеграции и небольшого веса.

Создание собственного блока Gutenberg с подсветкой синтаксиса

Рассмотрим пример создания блока с использованием Prism.js. Для этого необходимо зарегистрировать блок в JavaScript и подключить стили Prism.js.

Подключение Prism.js и стилей

Скачайте Prism.js с официального сайта или подключите через CDN в файле functions.php вашей темы или плагина:

function wpstock_enqueue_prism() {
  wp_enqueue_style('prism-css', 'https://cdn.jsdelivr.net/npm/prismjs/themes/prism.css', array(), '1.0');
  wp_enqueue_script('prism-js', 'https://cdn.jsdelivr.net/npm/prismjs/prism.js', array(), '1.0', true);
}
add_action('enqueue_block_assets', 'wpstock_enqueue_prism');

Регистрация блока в JavaScript

Создайте файл block.js с кодом блока:

const { registerBlockType } = wp.blocks;
const { TextareaControl, SelectControl } = wp.components;
const { useState, useEffect } = wp.element;

registerBlockType('wpstock/code-highlight', {
    title: 'Код с подсветкой',
    icon: 'editor-code',
    category: 'widgets',
    attributes: {
        codeContent: { type: 'string', default: '' },
        language: { type: 'string', default: 'javascript' }
    },
    edit: (props) => {
        const { attributes: { codeContent, language }, setAttributes } = props;

        useEffect(() => {
            // Обновляем подсветку после каждого изменения
            Prism.highlightAll();
        }, [codeContent, language]);

        return (
            <div>
                <SelectControl
                    label="Язык программирования"
                    value={language}
                    options={[
                        { label: 'JavaScript', value: 'javascript' },
                        { label: 'PHP', value: 'php' },
                        { label: 'HTML', value: 'markup' },
                        { label: 'CSS', value: 'css' },
                        { label: 'Python', value: 'python' },
                    ]}
                    onChange={(newLang) => setAttributes({ language: newLang })}
                />
                <TextareaControl
                    label="Код"
                    value={codeContent}
                    onChange={(newCode) => setAttributes({ codeContent: newCode })}
                    rows={10}
                />
                <pre><code className={`language-${language}`}>{codeContent}
); }, save: (props) => { const { attributes: { codeContent, language } } = props; return (
{codeContent}
); } });

Подключите этот скрипт через functions.php:

function wpstock_enqueue_block_scripts() {
    wp_enqueue_script(
        'wpstock-code-block',
        get_template_directory_uri() . '/js/block.js',
        array('wp-blocks', 'wp-element', 'wp-components', 'wp-i18n'),
        '1.0',
        true
    );
}
add_action('enqueue_block_editor_assets', 'wpstock_enqueue_block_scripts');

Дополнительные советы по созданию и использованию блока

Кэширование и производительность

Подсветка синтаксиса может влиять на производительность, особенно если кодов много. Используйте отложенную загрузку Prism.js и минимизируйте количество подключаемых языков.

Интеграция с темами и плагинами

Убедитесь, что стили блока не конфликтуют с вашей темой. Для wpstock.ru можно использовать тему Reboot или Root, которые хорошо совместимы с кастомными блоками.

Использование готовых плагинов

Если разработка собственного блока кажется сложной, можно использовать готовые плагины с подсветкой кода, например:

Но они могут быть слишком громоздкими или не всегда соответствовать вашим требованиям по стилю и функционалу.

Выводы и практические рекомендации

Создание собственного блока для вставки кода с подсветкой синтаксиса в WordPress — отличное решение для технических сайтов и блогов. Это даёт полный контроль над функционалом, стилями и UX. Используйте Prism.js для лёгкой и красивой подсветки, настраивайте языки и интегрируйте блок в редактор Gutenberg. Это улучшит восприятие вашего контента и облегчит работу авторов.

Для удобства и расширения возможностей можно рассмотреть покупку и использование профессиональных плагинов и тем на wpshop.ru, где есть качественные решения для WordPress.

Как создать динамическую выводную страницу в WordPress с помощью мета записей
20.11.2025
Как автоматически отключить плагины на отдельных страницах WordPress для оптимизации
26.04.2026
Запрет доступа к страницам WooCommerce для неавторизованных пользователей
20.04.2026
Как изменить URL страницы в WordPress без перенаправления
22.02.2026
Как удалить или отключить XML-RPC в WordPress: практическое руководство
12.01.2026