Как добавить настройку автозагрузки медиафайлов в WordPress

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

Почему важна автозагрузка медиа: ключевые преимущества и проблемы без оптимизации

Автозагрузка (lazy load) — это техника, при которой изображения и видео загружаются только тогда, когда пользователь прокручивает страницу до их появления в области видимости. Это снижает время начальной загрузки страницы и уменьшает потребление трафика, особенно на мобильных устройствах.

Без автозагрузки браузер загружает все медиа сразу, что увеличивает время загрузки и может негативно повлиять на SEO и пользовательский опыт. В WordPress начиная с версии 5.5 встроена базовая поддержка lazy load для изображений через атрибут loading="lazy", но далеко не все ситуации покрываются, и для видео или iframe нужно дополнительное решение.

Как добавить настройку автозагрузки медиафайлов в админке WordPress

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

Регистрация настройки и добавление поля в меню «Настройки»

Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:

<?php
// Регистрируем настройку
function wpsolution_register_lazyload_setting() {
    register_setting('wpsolution_media_options', 'wpsolution_lazyload_enabled');

    add_settings_section(
        'wpsolution_media_section',
        'Настройки автозагрузки медиафайлов',
        'wpsolution_media_section_cb',
        'media'
    );

    add_settings_field(
        'wpsolution_lazyload_enabled',
        'Включить автозагрузку (lazy load)',
        'wpsolution_lazyload_field_cb',
        'media',
        'wpsolution_media_section'
    );
}
add_action('admin_init', 'wpsolution_register_lazyload_setting');

// Колбек для описания секции
function wpsolution_media_section_cb() {
    echo '<p>Управление автозагрузкой изображений и видео на сайте.</p>';
}

// Колбек для поля настройки
function wpsolution_lazyload_field_cb() {
    $value = get_option('wpsolution_lazyload_enabled', '1');
    echo '<input type="checkbox" name="wpsolution_lazyload_enabled" value="1" ' . checked(1, $value, false) . ' /> Включено';
}

Этот код добавит чекбокс в стандартный раздел Медиа в админке WordPress, где можно будет включать или отключать lazy load.

Обработка включения и отключения автозагрузки для изображений и видео

Теперь нужно использовать эту опцию, чтобы контролировать добавление атрибута loading="lazy" к изображениям и видео. Для изображений достаточно фильтра wp_lazy_loading_enabled, а для видео можно добавить собственный JavaScript.

// Фильтр для изображений
function wpsolution_lazyload_filter($default, $image, $context) {
    $enabled = get_option('wpsolution_lazyload_enabled', '1');
    return $enabled === '1';
}
add_filter('wp_lazy_loading_enabled', 'wpsolution_lazyload_filter', 10, 3);

// Добавляем JS для автозагрузки видео и iframe, если включено
function wpsolution_lazyload_scripts() {
    $enabled = get_option('wpsolution_lazyload_enabled', '1');
    if ($enabled !== '1') {
        return;
    }

    wp_enqueue_script('wpsolution-lazyload', 'https://cdnjs.cloudflare.com/ajax/libs/vanilla-lazyload/17.3.1/lazyload.min.js', array(), '17.3.1', true);

    wp_add_inline_script('wpsolution-lazyload', "
        document.addEventListener('DOMContentLoaded', function() {
            var lazyLoadInstance = new LazyLoad({
                elements_selector: '.lazy',
                load_delay: 300,
            });
        });
    ");
}
add_action('wp_enqueue_scripts', 'wpsolution_lazyload_scripts');

Этот код подключит библиотеку vanilla-lazyload и инициализирует её для элементов с классом lazy. Чтобы видео и iframe подгружались лениво, нужно добавить класс lazy и использовать специальные атрибуты data-src вместо обычного src.

Пример использования автозагрузки для видео с кастомным шорткодом

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

function wpsolution_lazyload_video_shortcode($atts) {
    $atts = shortcode_atts(array(
        'src' => '',
        'poster' => '',
        'width' => '640',
        'height' => '360',
    ), $atts, 'lazyvideo');

    if (empty($atts['src'])) {
        return '<p>Ошибка: не указан адрес видео.</p>';
    }

    $enabled = get_option('wpsolution_lazyload_enabled', '1');

    if ($enabled === '1') {
        $video = '<video width="' . esc_attr($atts['width']) . '" height="' . esc_attr($atts['height']) . '" controls poster="' . esc_attr($atts['poster']) . '">'
            . '<source data-src="' . esc_url($atts['src']) . '" type="video/mp4" class="lazy" />'
            . 'Ваш браузер не поддерживает видео тег.'</video>';
    } else {
        $video = '<video width="' . esc_attr($atts['width']) . '" height="' . esc_attr($atts['height']) . '" controls poster="' . esc_attr($atts['poster']) . '">'
            . '<source src="' . esc_url($atts['src']) . '" type="video/mp4" />'
            . 'Ваш браузер не поддерживает видео тег.'</video>';
    }

    return $video;
}
add_shortcode('lazyvideo', 'wpsolution_lazyload_video_shortcode');

Используйте шорткод на странице так:

[lazyvideo src="https://example.com/video.mp4" poster="https://example.com/poster.jpg" width="800" height="450"]

Если автозагрузка включена, видео будет подгружаться лениво. Если нет — видео загружается сразу.

Рекомендации по использованию и совместимость с плагинами

Обратите внимание, что базовый lazy load в WordPress не всегда работает с плагинами, которые генерируют медиа динамически или используют нестандартные теги. В таких случаях имеет смысл использовать профессиональные плагины, например, Clearfy Pro, который расширяет возможности оптимизации.

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

Итог

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

Как создать автоматический импорт постов из RSS в WordPress
10.03.2026
Как создать автоматический резервный бэкап WordPress с помощью плагинов и кода
03.01.2026
Как использовать REST API в WordPress для создания панели настроек
17.11.2025
WooCommerce: как автоматически удалять заказы после их архивирования
18.05.2026
Как удалить метаданные заказа WooCommerce из базы после его закрытия
24.04.2026