Прототип под ваше ТЗ: порядок работ, как будут выглядеть поля ACF, как работает конвертация и сколько места она освобождает. Цифры в калькуляторе условные, пока я не видел ваш сайт.
| День | Шаг | Как проверяю |
|---|---|---|
| 1 | Полная копия файлов и базы, развёртывание на стенде. Обновление ядра WordPress и всех плагинов по одному. | сайт открывается, ошибок в debug.log нет |
| 1 | Плагины, которые не поддерживают новое ядро или PHP: список, замена или правка. | каждая страница отдаёт 200 |
| 2 | Правка выбранных страниц: контент выносится в поля ACF, шаблон читает поля, редактирование идёт из админки. | правка поля меняет страницу |
| 2 | Настройка VPS: nginx, PHP-FPM, MariaDB, SSL, кэш, резервные копии. | ответ сервера меньше 300 мс |
| 3 | Конвертация изображений в WebP, перенос базы и файлов, переключение DNS в ночное окно. | старый хостинг остаётся запасным 7 дней |
Пример группы полей для страницы. Редактор меняет текст и картинку в админке, шаблон подставляет их сам.
| Поле | Тип ACF | Где выводится |
|---|---|---|
| hero_title | Текст | заголовок первого экрана |
| hero_image | Изображение (ID) | фон первого экрана, сразу WebP |
| about_text | Редактор (WYSIWYG) | основной текст страницы |
| blocks | Повторитель | список блоков: заголовок, текст, ссылка |
<h1><?php the_field('hero_title'); ?></h1>
<?php echo wp_get_attachment_image( get_field('hero_image'), 'large' ); ?>
<?php while ( have_rows('blocks') ) : the_row(); ?>
<h3><?php the_sub_field('title'); ?></h3>
<?php endwhile; ?>
Хук срабатывает в момент загрузки в медиатеку, оригинал удаляется, в базе остаётся только WebP. Старую медиатеку конвертирует отдельный пакетный скрипт, перед запуском делается резервная копия.
add_filter('wp_handle_upload', function($f){
if ( ! in_array($f['type'], ['image/jpeg','image/png']) ) return $f;
$img = wp_get_image_editor($f['file']);
$webp = preg_replace('/\.(jpe?g|png)$/i', '.webp', $f['file']);
if ( ! is_wp_error($img) && ! is_wp_error($img->save($webp, 'image/webp')) ) {
unlink($f['file']); // оригинал не храним
$f['file'] = $webp; $f['type'] = 'image/webp';
$f['url'] = preg_replace('/\.(jpe?g|png)$/i', '.webp', $f['url']);
}
return $f;
});
Подставьте свои числа. Для WebP я беру ориентир 65 процентов экономии к JPEG, точное значение на вашем сайте покажет пробная пачка из 50 файлов.
| 1 | Сайт на последней версии WordPress и плагинов, список изменений по каждому плагину. |
| 2 | Страницы на ACF, короткая инструкция для редактора. |
| 3 | Сайт на VPS с SSL, кэшем и ежедневной копией. |
| 4 | Правки в течение 14 дней после сдачи бесплатно. |