WP-CLI — это консольный инструмент управления WordPress. Практически всё, что вы делаете мышкой в админке, он умеет делать одной строкой в терминале: обновить плагины, создать пользователя, выгрузить базу, заменить домен при переезде, сбросить кеш. Разница принципиальная: команду можно повторить на десяти сайтах, положить в скрипт и запустить по расписанию, а клики повторить нельзя.
Ниже — набор команд, которые реально нужны в повседневной работе, и грабли, на которые наступают чаще всего. Актуальная стабильная версия на момент публикации — WP-CLI 2.12.0 (вышла 7 мая 2025 года); минимальные требования — PHP 7.2.24 и выше.
Установка и первая проверка
WP-CLI распространяется как один PHAR-файл (PHP-архив, исполняемый как программа). На большинстве нормальных хостингов с SSH он уже установлен — сначала проверьте:
wp --info
Если команды нет, ставим вручную:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info
Сам инструмент обновляется отдельно от WordPress:
wp cli version
wp cli check-update
wp cli update
Всё дальнейшее подразумевает, что вы работаете по SSH. Если с терминалом на «вы», начните со шпаргалки по SSH-командам — WP-CLI живёт ровно в этой среде.
Как WP-CLI понимает, с каким сайтом работать
По умолчанию он ищет wp-config.php в текущей папке и выше. Отсюда правило: заходите в корень сайта и работайте оттуда. Если нужно иначе — есть глобальные параметры:
--path=/var/www/site— путь к установке WordPress;--url=https://example.com— обязателен на мультисайте, чтобы выбрать конкретный сайт сети;--user=admin— выполнить команду от имени пользователя (важно для плагинов, проверяющих права);--ssh=user@host:/var/www/site— выполнить команду на удалённом сервере, не заходя туда руками;--skip-plugins/--skip-themes— не грузить плагины и темы. Спасательный круг, когда сайт падает с фатальной ошибкой и обычные команды тоже не работают.
Отдельно про --allow-root: этот флаг разрешает запуск от суперпользователя. Он существует не для удобства, а как аварийный выход. Регулярный запуск от root приводит к тому, что созданные файлы принадлежат root, а веб-сервер потом не может их перезаписать — классическая причина «обновление не устанавливается».
Ядро, плагины и темы
Самая частая ежедневная задача — обновления. В консоли это быстрее, чем в админке, и главное — видно, что именно поменяется:
wp core version
wp core check-update
wp core update
wp core update-db
wp core update-db легко забыть, а он обязателен после мажорного обновления ядра — именно он приводит структуру базы в соответствие новой версии.
wp plugin list --update=available
wp plugin update --all --dry-run
wp plugin update --all
wp plugin update woocommerce
--dry-run показывает список того, что будет обновлено, не трогая сайт. Привычка запускать сначала его экономит нервы.
wp plugin install wordpress-seo --activate
wp plugin deactivate hello
wp plugin delete hello
wp theme list
wp theme update --all
Проверка целостности файлов — недооценённая команда. Она сверяет контрольные суммы файлов с официальными и показывает изменённые или лишние:
wp core verify-checksums
wp plugin verify-checksums --all
Это первое, что стоит запускать при подозрении на взлом; остальные шаги — в практическом гайде по безопасности WordPress.
База данных
WP-CLI берёт доступы прямо из wp-config.php, поэтому логин и пароль от MySQL вводить не нужно:
wp db export backup-$(date +%F).sql
wp db import backup-2026-09-07.sql
wp db size --tables --human-readable
wp db check
wp db optimize
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_status='publish';"
wp db export без аргумента кладёт дамп в текущую папку — если это корень сайта, файл окажется доступен из интернета. Пишите дамп за пределы веб-корня или сразу переносите его.
wp db optimize — это обёртка над OPTIMIZE TABLE: она дефрагментирует таблицы, но не ускоряет медленные запросы сама по себе. Если тормозит выборка, проблема обычно в отсутствующих индексах — об этом отдельная заметка про индексы MySQL.
Перенос сайта и смена домена
Ради одной этой команды многие и ставят WP-CLI. Простой SQL-запрос UPDATE ... REPLACE ломает сериализованные данные (формат, в котором WordPress хранит массивы и объекты в опциях и метаполях: там записана длина каждой строки, и после наивной замены длина перестаёт совпадать). wp search-replace разбирает такие структуры и пересобирает их корректно:
wp search-replace 'http://old-domain.ru' 'https://new-domain.ru' --dry-run --report-changed-only
wp search-replace 'http://old-domain.ru' 'https://new-domain.ru' --all-tables --report-changed-only
Полезные ключи:
--dry-run— прогон без записи. Всегда начинайте с него;--all-tables— включить таблицы, не зарегистрированные в WordPress (их создают некоторые плагины);--precise— обработка на стороне PHP вместо SQL: точнее, но заметно медленнее;--export=dump.sql— записать результат в SQL-файл, не меняя текущую базу. Удобно при переезде: выгрузили с заменой, залили на новый сервер;--regex— замена по регулярному выражению, работает примерно в 15–20 раз медленнее обычной.
Перед боевым запуском сделайте wp db export. Это тот случай, когда отката без бэкапа не будет.
Пользователи
wp user list --fields=ID,user_login,user_email,roles
wp user create ivan ivan@example.com --role=editor
wp user update 5 --user_pass='новый-пароль'
wp user reset-password 5
wp user set-role 5 administrator
wp user delete 7 --reassign=1
Команда wp user update — стандартный способ вернуть себе доступ, когда почта не отправляется, а пароль администратора потерян. При удалении пользователя не забывайте --reassign, иначе его записи удалятся вместе с ним.
Контент, медиа и рутинные операции
wp post list --post_type=page --fields=ID,post_title,post_status
wp post create --post_type=page --post_title='Контакты' --post_status=draft
wp post delete 123 --force
wp media import ~/photos/*.jpg --post_id=42
wp media regenerate --yes --only-missing
wp media regenerate пересоздаёт миниатюры после смены темы или добавления новых размеров изображений. Флаг --only-missing обрабатывает лишь недостающие размеры — на большой медиатеке это разница между минутой и часом.
Кеш, транзиенты и постоянные ссылки
wp cache flush
wp transient delete --expired
wp transient delete --all
wp rewrite flush
wp option get siteurl
wp option update blogname 'Новое название'
wp rewrite flush — лекарство от «страницы отдают 404 после переноса». wp cache flush чистит объектный кеш; если у вас подключён Redis или Memcached, команда работает именно с ним. Что и на каком уровне кешируется, разобрано в обзоре способов кэширования в WordPress.
Планировщик задач
wp cron event list
wp cron event run --due-now
wp cron test
wp cron event delete my_broken_hook
WP-Cron в WordPress запускается посетителями сайта: нет трафика — нет задач. Правильная схема для боевого сервера — отключить встроенный планировщик (define('DISABLE_WP_CRON', true); в wp-config.php) и повесить системный cron на команду wp cron event run --due-now раз в 5–15 минут. Заодно уходит лишняя нагрузка на каждый визит — один из пунктов чек-листа по ускорению WordPress.
Вывод в нужном формате и связка с шеллом
Почти каждая команда list и get понимает --format: table (по умолчанию), csv, json, yaml, ids, count. Это превращает WP-CLI в источник данных для скриптов:
wp post list --post_type=product --format=count
wp plugin list --status=active --field=name
wp post list --post_type=post --format=csv > posts.csv
wp post list --post_status=trash --format=ids | xargs wp post delete --force
Последняя строка — типовой приём: получили список ID, передали его следующей команде. Так же чистят спам-комментарии, снимают роли, массово правят метаполя.
Конфиг и алиасы: работа с несколькими сайтами
Файл wp-cli.yml в корне проекта задаёт значения по умолчанию, а алиасы описывают другие окружения. Пример:
path: web/wp
url: https://example.com
@staging:
ssh: deploy@staging.example.com/var/www/site
@production:
ssh: deploy@example.com/var/www/site
После этого wp @staging plugin list выполнится на стейдже, а wp @all core version — на всех описанных площадках сразу. Приоритет настроек: аргументы командной строки, затем wp-cli.local.yml, затем wp-cli.yml, затем глобальный ~/.wp-cli/config.yml.
Частые грабли
- Запуск от root по привычке. Файлы получают чужого владельца, и сайт потом не может себя обновлять. Запускайте от пользователя веб-сервера.
- Массовое обновление сразу на проде.
wp plugin update --all— мощная команда; сначала стейдж или хотя бы свежийwp db export. - Дамп в веб-корне. Файл
backup.sqlрядом сindex.phpскачивается любым желающим, который угадал имя. - Нехватка памяти. PHP в CLI использует собственный
php.ini. Еслиwp media regenerateпадает, поднимите лимит:php -d memory_limit=512M "$(which wp)" media regenerate. - Сайт лежит, команды не работают. Добавьте
--skip-plugins --skip-themes— так WP-CLI загрузит только ядро и позволит отключить виновника. - Кириллица в выводе. Проверьте локаль сессии (
LANG=ru_RU.UTF-8), иначе таблицы разъезжаются, а русские значения в аргументах приходится брать в одинарные кавычки.
Вывод
WP-CLI окупается на второй же задаче: один раз набранная команда обновления или переноса домена превращается в строку, которую можно повторить, задокументировать и отдать скрипту. Начните с малого — wp plugin list --update=available, wp db export, wp search-replace --dry-run. Дальше набор сам разрастётся до собственной шпаргалки, а рутинное обслуживание сайтов перестанет отнимать вечера.
Частые вопросы
Для одного сайта и разовых задач — нет. Смысл появляется, когда сайтов несколько или операция повторяемая: обновить плагины на пяти проектах, перенести домен, регулярно снимать дамп базы. Команду можно записать в скрипт и поставить в cron, клики — нельзя.
Командой wp search-replace: она корректно обрабатывает сериализованные данные, которые ломает обычный SQL-запрос UPDATE ... REPLACE. Порядок: сделать wp db export, прогнать замену с флагом --dry-run, посмотреть отчёт и только потом запустить без него.
Добавьте --skip-plugins и --skip-themes: WP-CLI загрузит только ядро, минуя сломанный код. После этого можно отключить виновника командой wp plugin deactivate.
Минимум PHP 7.2.24. Учтите, что PHP в командной строке использует свой php.ini, отдельный от того, что применяется веб-сервером, — лимит памяти и версия там могут отличаться от значений на сайте.
Источники
- 1.WP-CLI Handbook — Installinghttps://make.wordpress.org/cli/handbook/guides/installing/
- 2.WP-CLI v2.12.0 Release Noteshttps://make.wordpress.org/cli/2025/05/07/wp-cli-v2-12-0-release-notes/
- 3.wp search-replace — WP-CLI Commandhttps://developer.wordpress.org/cli/commands/search-replace/
- 4.WP-CLI Handbook — Config (wp-cli.yml, алиасы)https://make.wordpress.org/cli/handbook/references/config/
- 5.WP-CLI Commands Referencehttps://developer.wordpress.org/cli/commands/



