Что такое WP-CLI
WP-CLI — официальный инструмент командной строки для управления WordPress. Позволяет обновлять плагины, управлять пользователями, делать поиск-замену в базе данных и многое другое без входа в wp-admin.
Установка WP-CLI
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp
wp --info
sudo -u www-data wp ...Основные команды
| Команда | Описание |
|---|---|
| wp core update | Обновить WordPress |
| wp plugin update --all | Обновить все плагины |
| wp theme list | Список тем |
| wp user list | Список пользователей |
| wp db export backup.sql | Экспорт базы данных |
| wp cache flush | Очистить кэш |
Поиск-замена в базе данных
# Миграция с HTTP на HTTPS
wp search-replace 'http://example.com' 'https://example.com' --all-tables
# Смена домена
wp search-replace 'old-domain.com' 'new-domain.com' --all-tables --dry-run
--dry-run перед реальной заменой — это покажет количество строк к изменению без изменений.Создание пользователя-администратора
wp user create admin2 admin2@example.com --role=administrator --user_pass=StrongPass123!
Разбор ошибок WP-CLI
WP-CLI выполняет команды от имени PHP CLI SAPI, а не веб-сервера, поэтому часть ошибок специфична именно для командной строки.
| Текст ошибки | Причина | Что делать |
|---|---|---|
| Error: This does not seem to be a WordPress installation | Команда запущена не в корне сайта, WP-CLI не находит wp-load.php | Перейти в директорию с wp-config.php или указать --path=/var/www/site |
| Error: Because "wpdb" is a global, we can not run this command | Код в wp eval выполняется раньше, чем WordPress успел полностью подняться | Использовать wp eval-file и дожидаться хука init внутри файла |
| PHP Fatal error: Allowed memory size exhausted | Лимит memory_limit для CLI SAPI в php.ini меньше, чем нужно для тысяч замен search-replace | Временно поднять memory_limit для CLI в отдельном php.ini или через флаг --require |
| Error establishing a database connection при wp core update-db | В wp-config.php неверные DB_HOST или DB_USER после переноса сайта на новый сервер | Проверить константы подключения и повторить команду |
Если ошибка связана именно со сменой домена — см. отдельную статью про смену домена в WordPress.
Когда WP-CLI не подходит
- Хостинг без SSH-доступа (многие shared-тарифы) — WP-CLI физически негде запускать
- Массовые правки контента в блочном редакторе Gutenberg — неаккуратный search-replace может сломать сериализованные JSON-атрибуты внутри блоков
- Мультисайт-сеть с десятками поддоменов — каждую команду нужно запускать с флагом --url для конкретного сайта, иначе она затронет не ту таблицу
- Изменения, которые нужно оценить визуально — дизайн, вёрстка, расположение блоков — CLI ничего не покажет, здесь нужен браузер и staging
- Управление правами доступа и ролями пользователей на уровне отдельных записей — WP-CLI управляет ролями целиком, а тонкая настройка capability на конкретный пост требует кода или плагина
Отдельно стоит помнить про права файловой системы: WP-CLI по умолчанию выполняется от имени того пользователя, который его запустил. Если запустить команду от root на сайте, где веб-сервер работает от www-data, новые и изменённые файлы окажутся недоступны для записи веб-серверу — плагины перестанут обновляться через интерфейс wp-admin.
Бэкап и профилирование перед изменениями
Перед любой массовой операцией через WP-CLI делайте снимок базы — откат через восстановление быстрее, чем разбор последствий вручную.
wp db export --add-drop-table backup-before-migrate.sql
wp profile stage --url=example.com
wp transient delete --all
Про сам процесс резервного копирования — в статье про бэкап WordPress. Очистку неиспользуемых таблиц и транзиентов после массовых миграций стоит проводить сразу после проверки контрольных сумм, а не откладывать на потом.
Как проверить, что команда отработала верно
- После wp core update выполните проверку контрольных сумм ядра против официального репозитория
- После обновления плагинов сверьте контрольные суммы каждого плагина отдельно
- После search-replace с --dry-run сравните число затронутых строк с реальным прогоном без флага
- После любой миграции откройте сайт в браузере и проверьте, что не осталось старого домена в ссылках
- Проверьте код возврата команды:
echo $?сразу после выполнения — 0 означает успех, любое другое число — ошибку, даже если вывод в консоли выглядел нормально
wp core verify-checksums
wp plugin verify-checksums --all
echo $? # 0 — контрольные суммы совпали
Если команда завершилась с ошибкой обновления самого ядра WordPress — сверьтесь с общим планом миграции на VPS в статье про перенос WordPress.