Оптимизация производительности сайта на WordPress часто упирается в плагины. Каждый плагин добавляет PHP-код, который нужно выполнять, включает скрипты и стили, а также может выполнять дополнительные запросы к базе данных. Это значит, что ненужные плагины могут замедлить скорость загрузки страниц, что негативно скажется на опыте пользователей и рейтинге страницы в поисковых системах. В этой статье мы рассмотрим, как отключить плагины WordPress по условию.
Проблема
Рассмотрим пример плагина, который создает и отображает пользовательские формы на главных страницах, например, Contact Form 7. Обычно форма нужна только на одной странице, но, теоретически, вы можете захотеть встроить форму на любую страницу с помощью шорткода плагина. В результате Contact Form 7 загружает скрипты и стили на каждой странице вашего сайта.
Решение
Нужно ли запускать код плагина и включать скрипты и стили на каждой странице вашего сайта? Конечно, нет. В этой статье мы расскажем, как предотвратить загрузку ненужных плагинов на определенных страницах и постах, чтобы вы могли установить дополнительные плагины и при этом сохранять быструю загрузку вашего сайта WordPress. Для выполнения этой задачи мы будем отключать плагины WordPress программным способом на конкретных страницах и постах.
Общие правила при выборе плагинов
- Устанавливайте только хорошо кодированные плагины от проверенных разработчиков: учитывайте количество активных установок, рейтинг пользователей, поддержку клиентов, частоту обновлений и отзывы сообщества WordPress.
- Предпочитайте масштабируемые плагины: сравнивайте похожие плагины с точки зрения производительности, используя инструменты разработчика браузера или онлайн-сервисы, такие как Google Pagespeed Insights, Pingdom и GTmetrix, чтобы оценить влияние каждого плагина на время загрузки страницы.
- Не устанавливайте ненужные плагины: это очевидно, но стоит упомянуть, что никогда не стоит устанавливать плагин, который вам действительно не нужен по соображениям безопасности и производительности. Также периодически проверяйте свои плагины и удаляйте те, которые вам больше не нужны и не используются.
Практический пример
Contact Form 7 — отличный плагин для создания и отображения форм в WordPress. Он включает следующие файлы на каждой странице, даже если страница не содержит форму:
- style.css
- scripts.js
Как получить список всех активных плагинов программным способом
Для начала вы можете получить список всех активных плагинов на вашем сайте WordPress с помощью простого фрагмента PHP-кода. Добавьте следующий код либо в свой собственный плагин, либо в functions.php, или бесплатного плагина WordPress, такого как Code Snippets:
/**
* Plugin Name: Active Plugins
* Plugin URI: http://wordpress.org/extend/plugins/#
* Description: This is a development plugin
* Author: Your Name
* Version: 1.0
* Author URI: https://example.com/
*/
add_shortcode( 'activeplugins', function(){
$active_plugins = get_option( 'active_plugins' );
$plugins = "";
if( count( $active_plugins ) > 0 ){
$plugins = "<ul>";
foreach ( $active_plugins as $plugin ) {
$plugins .= "<li>" . $plugin . "</li>";
}
$plugins .= "</ul>";
}
return $plugins;
});
Далее создайте новый пост в блоге и вставьте шорткод [activeplugins]
. Он должен отображать список всех активных плагинов прямо на странице.
Если вы не хотите усложнять себе жизнь и знаете как посмотреть таблицы в базе данных, например через phpMyAdmin, тогда вы можете посмотреть этот список в таблице wp_options
вашей базы.
Программное отключение и активация плагинов
Теперь, когда у нас есть список активных плагинов, мы можем сделать следующий шаг и программно отключать или активировать плагины, используя фильтр option_active_plugins
. Этот фильтр позволяет программно активировать или деактивировать плагины, так как все активные плагины хранятся в таблице wp_options
под значением active_plugins
.
Вот пример кода для активации плагина программно. Предположим, вы хотите активировать плагин ACF:
add_filter( 'option_active_plugins', function( $plugins ){
$myplugin = "advanced-custom-fields/acf.php";
if( !in_array( $myplugin, $plugins ) ){
$plugins[] = $myplugin;
}
return $plugins;
} );
В этом примере мы предполагаем, что плагин установлен, но еще не активирован. Код просто добавляет плагин в список активных плагинов на каждой странице вашего сайта.
Для приоритизации загрузки нашего плагина, его нужно добавить в Must-use плагин.
Погрузитесь в увлекательный мир веб разработки и дизайна с моими эксклюзивными курсами на Udemy! Я их разработал с душой и учел все нюансы. Сейчас активированы скидки до 90%! Получите доступ к знаниям высокого качества от $9!
Создание must-use плагина для программного отключения плагинов
Мы собираемся создать must-use плагин, который находится в специальной папке /wp-content
, и запускается до любого обычного плагина.
Добавьте следующий код в файл active-plugins.php
, затем переместите его в папку /wp-content/mu-plugins
. Таким образом мы создаем новый плагин который всегда будет подгружаться в WordPress, он является обязательным:
$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
$is_admin = strpos( $request_uri, '/wp-admin/' );
if( false === $is_admin ){
add_filter( 'option_active_plugins', function( $plugins ){
global $request_uri;
$is_contact_page = strpos( $request_uri, '/contact/' );
$myplugin = "contact-form-7/wp-contact-form-7.php";
$k = array_search( $myplugin, $plugins );
if( false !== $k && false === $is_contact_page ){
unset( $plugins[$k] );
}
return $plugins;
} );
}
Пояснение кода
parse_url
возвращает путь запрашиваемого URL.strpos
находит позицию первого вхождения ‘/wp-admin/’ и возвращаетfalse
, если строка не найдена. Переменная$is_admin
хранит возвращаемое значение.- Условие предотвращает запуск фильтра в административной панели, чтобы мы могли безопасно получить доступ к страницам настроек плагинов. Если URI запроса не содержит ‘/wp-admin/’, мы вызываем фильтр
option_active_plugins
. - Наконец, если текущий плагин не находится в массиве активных плагинов, и текущий URI страницы не содержит
/contact/
, мы удаляем плагин из$plugins
.
После чего плагин создан и размещен в каталоге /mu-plugins/
, очистите кэш и добавьте шорткод [activeplugins]
на несколько страниц. Далее вы увидите что cf7 отображается в списке только на странице /contact/
.
Организация и фильтрация плагинов – это то, что всегда следует учитывать при оптимизации производительности сайта. Помните, что не все плагины разрабатываются с учетом производительности. Поэтому стоит потратить немного времени, чтобы определить, какие активы плагинов (CSS и JS) загружаются и где. Логично грузить стили и скрипты CF7 только на странице, где эта форма отображается, и отключать во всех остальных случаев.
Отключение нескольких плагинов одновременно
Мы можем отключить несколько плагинов сразу, добавив немного дополнительного PHP-кода:
$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
$is_admin = strpos( $request_uri, '/wp-admin/' );
if( false === $is_admin ){
add_filter( 'option_active_plugins', function( $plugins ){
global $request_uri;
$is_contact_page = strpos( $request_uri, '/contact/' );
$myplugins = array(
"contact-form-7/wp-contact-form-7.php",
"code-snippets/code-snippets.php",
"query-monitor/query-monitor.php",
"autoptimize/autoptimize.php"
);
if( false === $is_contact_page ){
$plugins = array_diff( $plugins, $myplugins );
}
return $plugins;
} );
}
В этом примере мы сначала определяем массив плагинов, которые нужно удалить, затем удаляем их с помощью функции array_diff
. Эта функция «сравнивает array1 с одним или несколькими другими массивами и возвращает значения из array1, которые не присутствуют ни в одном из других массивов».
Программное отключение плагинов позволяет гибко управлять производительностью вашего сайта WordPress. Этот метод может быть особенно полезен для оптимизации загрузки страниц и уменьшения нагрузки на сервер.
Плагины для фильтрации других плагинов
Если вы предпочитаете не заниматься программированием или хотите упростить процесс управления плагинами, можно воспользоваться готовыми решениями. Существуют несколько хороших плагинов, которые позволяют фильтровать и управлять плагинами прямо из панели администратора WordPress.
Plugin Load Filter
Plugin Load Filter — бесплатный плагин, который позволяет фильтровать плагины при различных условиях. Основные возможности:
- Фильтрация по форматам постов
- Фильтрация по типам контента
- Фильтрация модулей Jetpack
- Фильтрация URL (REST API, Heartbeat, AJAX, AMP и т.д.)
Активировав фильтр, администратор может указать, где именно на сайте он должен применяться плагин.
Plugin Organizer
Plugin Organizer — популярный плагин с более чем 10 000 активных установок и отличным рейтингом. Он предоставляет множество возможностей для администраторов сайта:
- Избирательное отключение плагинов по типам постов и URL
- Избирательное отключение плагинов по ролям пользователей
- Создание групп плагинов
- Изменение порядка загрузки плагинов
- Дополнительные функции
Плагин добавляет метабокс на экране редактирования постов, что позволяет администратору переопределять глобальные и индивидуальные настройки для конкретных постов и страниц.
Как отслеживать производительность: инструменты разработчика браузера
Для измерения времени загрузки страницы и анализа запросов сети можно использовать инструменты разработчика, встроенные в браузеры. Они предоставляют массу полезной информации. Каждый браузер имеет панель Network, которая показывает список сетевых запросов и связанной информации. Вот ссылки на документацию для различных браузеров:
Пример использования инструментов разработчика
На установке WordPress с восемнадцатью активными плагинами мы повторно проанализировали страницу поста с помощью Firefox Dev Tools. Вот результаты анализа производительности (пустой кэш):
- Размер: 255.19 Кб
- Время загрузки: 1.24 секунды
- Запросов: 12
После установки плагина Plugin Organizer для предотвращения загрузки плагина CF7, метрики изменились:
- Размер: 104.21 Кб
- Время загрузки: 0.80 секунды
- Запросов: 8
После отключения нескольких ненужных плагинов метрики стали еще лучше:
- Размер: 101.98 Кб
- Время загрузки: 0.46 секунды
- Запросов: 8
Заключение
Организация и фильтрация плагинов — важный аспект оптимизации производительности сайта WordPress. Использование собственных скриптов или готовых решений может существенно повысить скорость загрузки страниц и улучшить пользовательский опыт. Помните, что не все плагины разработаны с учетом производительности, поэтому разумно выделить время на их оптимизацию.
Рекомендую к прочтению статьи по оптимизации сайта, которые улучшат ваши позиции в поисковой выдачи и улучшат взаимодействие с пользователем:
- 12 важных советов по SEO для изображений, которые вам нужно знать
- CDN или Кэширование? Полное Руководство по Оптимизации Скорости Веб-Сайта
- SEO оптимизация сайта. Чеклист для разработчика сайтов
- WordPress: Минификация CSS, HTML и JS файлов с помощью PHP
- Топ плагинов для WordPress сайта, которые я ставлю на каждый проект.