Команды WP-CLI: полное справочное руководство (2026). Часть 3
Расширение возможностей WP-CLI с помощью пакетов
Функционал WP-CLI не ограничивается встроенными командами. Вы можете расширить его с помощью пакетов, созданных сообществом, которые добавляют совершенно новые возможности.
Что такое пакеты для WP-CLI?
Package — это сторонние наборы команд для WP-CLI, аналогичные плагинам для самого WordPress. Официальный индекс пакетов находится по адресу https://wp-cli.org/package-index/.
Как установить пакеты
wp package install <package-name>
Рекомендуемые пакеты
Doctor: диагностика работоспособности сайта:
wp package install wp-cli/doctor-command wp doctor check --all
Выполняется комплексная проверка работоспособности, охватывающая права доступа к файлам, целостность ядра и распространенные проблемы с конфигурацией.
Профиль: профилирование производительности:
wp package install wp-cli/profile-command wp profile stage --all
Это позволяет выявить медленные плагины, темы и запросы к базе данных. Очень полезно, когда нужно понять, что замедляет работу сайта.
Команда для входа: мгновенный магический вход по ссылкам:
wp package install aaemnnosttv/wp-cli-login-command wp login create admin
Это позволяет сгенерировать одноразовый URL-адрес для входа в систему без пароля. Он идеально подходит для быстрого доступа администраторов к системе во время разработки.
Dist-Archive: создание ZIP-файлов для распространения:
wp package install wp-cli/dist-archive-command wp dist-archive . my-plugin.zip
Поиск: расширенный поиск по содержимому:
wp package install wp-cli/find-command wp find "search term" --field=post_title
Управление установленными пакетами
wp package list wp package update wp package uninstall aaemnnosttv/wp-cli-login-command
Безопасность пакета
Устанавливайте пакеты только из надежных источников. Пакеты имеют полный доступ к вашим файлам WordPress и базе данных. Пакеты из официального индекса, как правило, безопасны, но всегда проверяйте источник, прежде чем устанавливать что-то незнакомое.
Создание пользовательских команд WP-CLI
Помимо пакетов, вы можете создавать собственные команды прямо в своей теме или плагине. Пользовательские команды особенно полезны для агентств, которые управляют множеством клиентских сайтов со схожими требованиями.
Зачем создавать пользовательские команды?
Пользовательские команды полезны для:
- Автоматизация задач по обслуживанию сайта
- Создание инструментов для разработчиков собственного плагина
- Создание повторяющихся сценариев развертывания
- Выполнение пользовательских миграций данных
Базовая пользовательская команда
Добавьте это в functions.php своей темы или в файл плагина:
<?php
if ( defined( 'WP_CLI' ) && WP_CLI ) {
class Custom_Maintenance_Command {
/**
* Очистите все временные файлы.
*
* ## ПРИМЕРЫ
*
* очистка при обслуживании wp-переходные процессы
*/ public function clear_transients() {
global $wpdb;
$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_%'" );
$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '_site_transient_%'" );
WP_CLI::success( 'Все переходные процессы устранены.' );
}/** * Удалите все спам-комментарии. * * ## ПРИМЕРЫ * * удаление спама при обслуживании wp */
public function delete_spam() {
$spam_comments = get_comments( [ 'status' => 'spam', 'number' => 0 ] );
foreach ( $spam_comments as $comment ) {
wp_delete_comment( $comment->comment_ID, true );
}
WP_CLI::success( sprintf( 'Удалены %d спамные комментарии.', count( $spam_comments ) ) );
}} WP_CLI::add_command( 'maintenance', 'Custom_Maintenance_Command' ); }
Используйте свои новые команды:
wp maintenance clear-transients wp maintenance delete-spam
Пользовательская команда с аргументами и форматами
<?php
if ( defined( 'WP_CLI' ) && WP_CLI ) {
class User_Report_Command {
/**
* Сгенерируйте пользовательский отчет по ролям.
*
* ## ВАРИАНТЫ
*
* <role>
* : роль пользователя, по которой составляется отчет.
*
* [--format=<format>]
* : формат вывода. Варианты: таблица, json, csv. По умолчанию: таблица.
*
* ## ПРИМЕРЫ
*
* wp user-report generate администратор
* wp user-report generate подписчик --format=csv
*/
public function generate( $args, $assoc_args ) {
list( $role ) = $args;
$users = get_users( [ 'role' => $role ] );
$data = [];
foreach ( $users as $user ) {
$data[] = [
'ID' => $user->ID,
'Username' => $user->user_login,
'Email' => $user->user_email,
'Registered' => $user->user_registered,
];
}
$format = $assoc_args['format'] ?? 'table';
WP_CLI\Utils\format_items( $format, $data, [ 'ID', 'Username', 'Email', 'Registered' ] );
}
}
WP_CLI::add_command( 'user-report', 'User_Report_Command' );
}
Используйте это:
wp user-report generate administrator wp user-report generate subscriber --format=csv > subscribers.csv
Пользовательская команда с индикатором выполнения
При выполнении длительных операций индикатор выполнения информирует пользователя о ходе работы:
public function all() {
$attachments = get_posts( [
'post_type' => 'attachment',
'post_mime_type' => 'image',
'posts_per_page' => -1,
] );
$progress = \WP_CLI\Utils\make_progress_bar(
'Обработка изображений',
count( $attachments )
);
foreach ( $attachments as $attachment ) {
$this->process_image( $attachment->ID );
$progress->tick();
}
$progress->finish();
WP_CLI::success( sprintf( 'Обработано %d изображений.', count( $attachments ) ) );
}
Полное руководство по созданию команд можно найти по адресу: https://make.wordpress.org/cli/handbook/guides/commands-cookbook/.
Создание плагинов и тем с помощью wp scaffold
wp scaffold генерирует шаблонный код для плагинов, тем и других компонентов WordPress. Вместо того чтобы вручную копировать стартовый шаблон, вы запускаете одну команду и мгновенно получаете правильно структурированную отправную точку.
Создание нового плагина
Чтобы создать плагин со стандартной структурой файлов, файлом readme и настройкой тестов PHPUnit, выполните следующие действия:
wp scaffold plugin my-plugin --plugin_name="My Plugin" \ --plugin_description="A short description" \ --plugin_author="Your Name" \ --activate
Замените my-plugin на название вашего плагина и укажите остальные данные. WP-CLI создаст папку, основной PHP-файл readme.txt, а также базовый каталог для тестирования. Добавьте --activate, чтобы активировать его сразу после создания шаблона.
Создание дочерней темы
Чтобы создать дочернюю тему на основе существующей родительской темы, выполните следующие действия:
wp scaffold child-theme my-child-theme --parent_theme=twentytwentyfive
Замените my-child-theme на свой слаг, а twentytwentyfive — на слаг установленной родительской темы.
Создайте пользовательский тип записи
Сгенерируйте код для регистрации пользовательского типа записи в плагине или теме:
wp scaffold post-type product --label="Product" --textdomain=my-plugin
WP-CLI выводит регистрационный код прямо в терминал. Скопируйте его в файл своего плагина или темы. Это избавит вас от необходимости вручную писать register_post_type() шаблон и обеспечит соответствие аргументов стандартам WordPress.
Создайте пользовательскую таксономию
Сгенерируйте код для регистрации пользовательской таксономии:
wp scaffold taxonomy product-category --post_types=product --label="Product Category"
Рекомендации по обеспечению безопасности при использовании WP-CLI
WP-CLI — мощный инструмент, и с этой мощью приходит и реальная ответственность за обеспечение безопасности.
Никогда не запускайте WP-CLI от имени пользователя root
При запуске WP-CLI от имени пользователя root создаются файлы, которые веб-сервер не может впоследствии изменить. Кроме того, это создает серьезную угрозу безопасности. Вместо этого найдите пользователя вашего веб-сервера и выполняйте команды от его имени.
# Узнайте, кто является пользователем вашего веб-сервера ps aux | grep -E 'apache|nginx|httpd' # Обычные пользователи: www-data, apache, nginx # Запустите от имени нужного пользователя sudo -u www-data wp plugin update --all
Исправлены проблемы с владением файлами
sudo chown -R www-data:www-data /var/www/html/wordpress
Ограничить доступ по SSH
Только авторизованные пользователи должны иметь доступ по SSH к серверам, на которых работает WP-CLI. WP-CLI имеет полный доступ к файлам и базе данных WordPress, поэтому скомпрометированная учетная запись SSH означает скомпрометированный сайт. Для аутентификации используйте SSH-ключи вместо паролей.
Никогда не храните учетные данные в скриптах
WP-CLI автоматически считывает учетные данные для доступа к базе данных из wp-config.php . Не прописывайте пароли в скриптах оболочки. Вместо этого используйте переменные среды или полагайтесь на wp-config.php напрямую.
Защитите файл wp-config.php
Установите строгие права доступа к файлу конфигурации, чтобы его мог читать только пользователь веб-сервера:
chmod 640 /var/www/html/wordpress/wp-config.php sudo chown www-data:www-data /var/www/html/wordpress/wp-config.php
Всегда используйте —dry-run перед командами, которые могут привести к сбою
Тестируйте опасные команды, прежде чем выполнять их:
wp search-replace 'old-domain.ru' 'new-domain.ru' --dry-run
Это наглядно показывает, что именно изменится, если ничего не менять.
Всегда делайте резервную копию перед внесением серьезных изменений
Выполняйте экспорт базы данных перед любой из следующих операций:
wp db export pre-change-backup.sql
Делайте это перед операциями поиска и замены, обновлением версии WordPress, обновлением плагинов в рабочей среде и любыми изменениями в структуре базы данных.
Используйте параметр —no-color в автоматизированных скриптах
При перенаправлении вывода WP-CLI в файлы журналов используйте --no-color, чтобы сохранить читаемость журналов:
wp plugin update --all --no-color >> /var/log/wp-updates.log 2>&1
Ограничения и риски
WP-CLI — мощный, но в то же время требовательный инструмент. Понимание его ограничений поможет вам избежать дорогостоящих ошибок.
1. Нет функции отмены
Операции в командной строке необратимы. В отличие от панели управления WordPress, здесь нет корзины или истории изменений. Например, wp db reset удаляет всю базу данных после одного подтверждения. Одна опечатка может стоить вам всех данных. Поэтому всегда делайте резервную копию перед выполнением любой команды, которая может привести к необратимым последствиям.
2. Функция поиска и замены может привести к повреждению сериализованных данных
WordPress хранит некоторые данные в сериализованном формате PHP. Простая замена строк приводит к сбоям: плагины перестают работать, настройки виджетов исчезают, а параметры темы сбрасываются, хотя сайт продолжает загружаться.
WP-CLI корректно обрабатывает сериализованные данные при правильном использовании. Однако всегда сначала используйте --dry-run и тестируйте на промежуточном сайте, прежде чем запускать на основном.
3. Запуск от имени другого пользователя приводит к ошибкам с правами доступа
Если вы запускаете WP-CLI от имени пользователя root или другого пользователя системы, он создает файлы, которые ваш веб-сервер не может прочитать или изменить. В результате WordPress не может загружать медиафайлы или обновлять собственные файлы. Всегда запускайте WP-CLI от имени пользователя www-data, apache, или от имени пользователя, под которым работает ваш веб-сервер.
4. Обновления плагинов могут привести к сбоям в работе сайтов
В новых версиях плагинов иногда появляются ошибки или проблемы с совместимостью. Более того, при одновременном обновлении 50 плагинов невозможно определить, какой из них вызвал проблему. Поэтому всегда тестируйте обновления на промежуточной версии, прежде чем запускать их в рабочей среде. На сайтах с высокой посещаемостью обновляйте плагины по одному.
5. WP-CLI не проверяет вводимые данные
WP-CLI полностью вам доверяет. Он выполняет любую команду, которую вы ему даете. Например, wp post delete $(wp post list --format=ids) удаляет все публикации на вашем сайте, запрашивая подтверждение только один раз. Прежде чем нажать Enter, дважды проверьте каждую команду, особенно те, в которых используется подстановка под оболочки.
6. Большие операции с базами данных могут выполняться с превышением времени ожидания
Поиск и замена в многогигабайтной базе данных занимают много времени. Если время ожидания SSH-соединения истекает в процессе выполнения команды, база данных оказывается в несогласованном состоянии. Чтобы этого избежать, запускайте длительные команды в среде screen или tmux:
screen -S wp-migration wp search-replace 'old-domain.ru' 'new-domain.ru' --all-tables
Если соединение прервалось, восстановите его с помощью screen -r wp-migration и продолжите выполнение команды.
Распространенные ошибки и способы их устранения
Ошибка 1: выполнение команд от имени пользователя root
Симптом: ошибки «Отказано в доступе» в WordPress. Не удается загрузить медиафайлы или обновить плагины через панель администратора.
Решение:
# Проверить владельца файла ls -la wp-content/ # Изменить владельца sudo chown -R www-data:www-data /var/www/html/wordpress # Выполняйте будущие команды правильно sudo -u www-data wp plugin update --all
Ошибка 2: не делайте резервную копию перед внесением изменений в базу данных
Проблема: потеря данных после поиска и замены или сброса базы данных без возможности восстановления.
Решение: возьмите это за правило. Сначала сделайте резервную копию, а затем вносите изменения.
wp db export backup-$(date +%Y%m%d-%H%M%S).sql wp search-replace 'old-value' 'new-value'
Ошибка 3: запуск из неправильного каталога
Симптом: «Ошибка: похоже, что это не установка WordPress».
Решение: сначала перейдите в корневой каталог WordPress или используйте --path:
cd /var/www/html/wordpress wp plugin list # Или откуда угодно wp plugin list --path=/var/www/html/wordpress
Ошибка 4: пропуск параметра —dry-run при поиске и замене
Проблема: после поиска и замены сбиваются настройки плагина, исчезают виджеты, сбрасываются параметры темы.
Решение: всегда сначала выполняйте предварительный просмотр:
# Предварительный просмотр изменений first wp search-replace 'http://old.ru' 'https://new.ru' --dry-run # Запускайте без пробного запуска только в том случае, если предварительный просмотр выглядит корректно wp search-replace 'http://old.ru' 'https://new.ru'
Ошибка 5: выполнение скриптов продолжается после сбоев
Симптом: последующие команды в скрипте выполняются в некорректном состоянии из-за того, что предыдущая команда завершилась без ошибок.
Решение: добавьте обработку ошибок в каждый скрипт:
#!/bin/bash set -e # Немедленно завершаем работу при возникновении любой ошибки
wp plugin update --all
if [ $? -ne 0 ]; then echo "Не удалось обновить плагин — остановка" exit 1 fi
wp theme update --all
Ошибка 6: обновление плагинов непосредственно в рабочей среде
Проблема: сайт перестает работать после обновления плагина в 3 часа ночи.
Решение: используйте промежуточную среду.
# Сначала протестируйте на промежуточной версии
wp plugin update plugin-name --path=/var/www/staging
# Убедившись, что все работает, обновите плагин production wp update plugin-name --path=/var/www/production
Ошибка 7: не считывание вывода команды
Симптом: кажется, что автоматические скрипты работают, но на самом деле ничего не меняется.
Решение: всегда перенаправляйте вывод в лог-файл и просматривайте его:
wp plugin update --all --no-color > /var/log/wp-cli.log 2>&1 tail -f /var/log/wp-cli.log
Устранение ошибок WP-CLI
«Похоже, это не установка WordPress»
Вы находитесь не в корневом каталоге WordPress. Перейдите туда или используйте --path:
cd /var/www/html/wordpress wp plugin list
«Ошибка при установлении соединения с базой данных»
У вашего wp-config.php неверные учетные данные. Проверьте их:
wp config get DB_NAME wp config get DB_USER wp db check
«Предупреждение: таблица ‘wp_options’ не существует»
WordPress установлен не полностью. Выполните полную команду установки:
wp core install --url=... --title=... --admin_user=... \ --admin_password=... --admin_email=...
Предупреждения о расширениях PHP
Установите недостающие расширения:
# Ubuntu/Debian sudo apt install php-mysql php-curl php-xml php-mbstring sudo systemctl restart apache2 # Fedora/RHEL sudo dnf install php-mysql php-curl php-xml php-mbstring
Ошибки с отказом в доступе
Запустите WP-CLI от имени пользователя веб-сервера или измените владельца файла:
sudo -u www-data wp plugin update --all sudo chown -R www-data:www-data /var/www/html/wordpress
Ошибки, связанные с ограничением памяти при выполнении больших операций
Увеличьте лимит памяти PHP для этой команды:
php -d memory_limit=512M /usr/local/bin/wp search-replace 'old' 'new'
Или увеличьте его навсегда в своем php.ini:
memory_limit = 512M
Встроенная справка
Каждая команда WP-CLI имеет подробную встроенную документацию:
wp help wp help plugin wp help plugin install wp help search-replace
Когда НЕ следует использовать WP-CLI
WP-CLI не всегда является подходящим инструментом. Используйте панель администратора WordPress, когда:
- Визуальная обратная связь важна: для настройки тем, конструкторов страниц и визуальных редакторов нужен браузер.
- Задача простая и разовая: нажать «Обновить» в одном плагине быстрее, чем вводить команду.
- Вы не знакомы с задачей: сначала изучите процесс вручную с помощью панели управления. WP-CLI усугубляет ошибки, если вы не знаете, что на самом деле делает та или иная команда.
- Сложная миграция контента: специализированные плагины для миграции справляются с нестандартными случаями лучше, чем команды, вводимые вручную.
- Работа с заинтересованными сторонами, не имеющими технического образования: клиентам нужно визуальное подтверждение изменений, а не окно терминала.
Начало:
- Команды WP-CLI: полное справочное руководство (2026). Часть 1
- Команды WP-CLI: полное справочное руководство (2026). Часть 2
Редактор: AndreyEx