Перейти к содержимому

PHP-оптимизация для WordPress

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

Актуальные рекомендации:

  • PHP 7.4 — минимальная официально поддерживаемая версия для WordPress
  • PHP 8.0–8.1 — «совместимы с исключениями»
  • PHP 8.2+ — полная поддержка в новых версиях WordPress

Новые версии PHP приносят не только функции, но и производительность, и безопасность. Версии ниже 7.4 достигли End of Life и подвергают сайт уязвимостям.

⚠️ При обновлении PHP тестируйте совместимость плагинов и темы на staging-окружении. Старые плагины могут не работать с PHP 8+.

Окно терминала
# WP-CLI команда для проверки совместимости плагинов и темы
wp phpcompat <version>

Таблица совместимости: PHP Compatibility and WordPress Versions.

PHP настраивается через php.ini. На некоторых хостингах доступна настройка через .htaccess или .user.ini.

Три ключевых параметра, которые должны быть согласованы между собой и с таймаутом веб-сервера (Apache/Nginx):

; Максимальное время выполнения скрипта (не включает системные вызовы и MySQL-запросы)
max_execution_time = 300
; Максимальное время на приём данных от веб-сервера (например, загрузка файлов)
max_input_time = 60

Важно: если таймаут веб-сервера меньше max_execution_time, запрос будет убит сервером независимо от настройки PHP. Таймауты должны увеличиваться пропорционально нагрузке — но в разумных пределах, чтобы не вызывать каскадный эффект.

; Глобальный лимит PHP на один процесс
memory_limit = 256M

WordPress имеет два собственных лимита в wp-config.php:

// Лимит для фронтенда (по умолчанию 40M, для Multisite — 64M)
define('WP_MEMORY_LIMIT', '128M');
// Лимит для админки (по умолчанию 256M)
define('WP_MAX_MEMORY_LIMIT', '256M');

Правило: WP_MEMORY_LIMIT <= WP_MAX_MEMORY_LIMIT. Админка требует больше памяти (медиа-загрузки, тяжёлые страницы настроек).

WordPress попытается поднять memory_limit до этих значений, но не опустит его, если в php.ini значение выше.

; Максимальный размер одного загружаемого файла
upload_max_filesize = 64M
; Максимальный размер всего POST-запроса
post_max_size = 64M

Правило: post_max_size >= upload_max_filesize. Иначе PHP не обработает запросы, превышающие post_max_size.

wp-cron.php запускается при каждом визите и проверяет, не пора ли выполнить отложенные задачи. Проверки лёгкие, но создают дополнительную нагрузку при каждом запросе.

wp-config.php
define('DISABLE_WP_CRON', true);
Окно терминала
# Добавить в crontab (каждые 15 минут)
*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Или через WP-CLI:

Окно терминала
*/15 * * * * wp cron event run --due-now --path=/var/www/html

Источник: WordPress Developer Handbook — PHP Optimization