Как использовать WP-CLI для массовых изменений в WordPress

Что такое WP-CLI и зачем он нужен для массовых изменений

WP-CLI — это командная строка управления WordPress, позволяющая выполнять большинство стандартных операций без захода в админ-панель. Для разработчиков и администраторов это мощный инструмент, который экономит время при массовом обновлении контента, пользователей, настроек и т.п. В этой статье мы рассмотрим конкретные сценарии массовых изменений с помощью WP-CLI, чтобы избежать ручной работы через интерфейс.

Диагностика задачи: когда стоит использовать WP-CLI

Перед тем как переходить к решению, убедитесь, что WP-CLI доступен на вашем сервере. В терминале выполните:

wp --info

Если команда выводит информацию о версии, значит WP-CLI установлен. Отсутствие команды — повод установить или попросить хостинг-провайдера помочь с установкой.

WP-CLI незаменим при следующих задачах:

  • Массовое обновление статусов публикаций (например, всех черновиков в опубликованные);
  • Изменение авторов постов для сотен или тысяч записей;
  • Обновление мета-полей для большого количества постов;
  • Импорт и экспорт пользователей с массовым изменением ролей;
  • Очистка спама или удаление комментариев по определённым критериям;
  • Обновление настроек плагинов и тем, если они поддерживают WP-CLI.

Пошаговое решение: массовое изменение статусов постов с помощью WP-CLI

1. Сделать резервную копию базы данных

Перед массовыми изменениями всегда сохраняйте бэкап БД:

wp db export backup.sql

2. Найти все посты с нужным статусом

Для примера переведём все посты со статусом draft в publish:

wp post list --post_status=draft --field=ID

3. Обновить статусы массово

Можно сделать обновление в цикле bash:

for ID in $(wp post list --post_status=draft --field=ID); do
  wp post update $ID --post_status=publish
  echo "Updated post $ID to publish"
done

4. Альтернативный вариант: использовать SQL-запрос через WP-CLI

wp db query "UPDATE wp_posts SET post_status = 'publish' WHERE post_status = 'draft' AND post_type = 'post';"

Обратите внимание: этот способ быстрее, но минус — нет автоматической очистки кэшей WP и хуков, которые могут срабатывать при обновлении поста.

Проверка результата после внедрения

Проверьте через WP-CLI, что статусы изменились:

wp post list --post_status=publish --field=ID | wc -l

Сравните число постов с числом ранее найденных черновиков. Также можно зайти в админку WordPress и проверить несколько страниц вручную.

Частые ошибки и как их исправить

  • Ошибка: Команда wp не найдена.
    Решение: Убедитесь, что WP-CLI установлен и доступен в PATH. Запустите which wp или обратитесь к хостеру.
  • Ошибка: Нет прав на запись БД.
    Решение: Проверьте права пользователя базы данных, используемого WordPress. Для выполнения SQL-запроса нужны права UPDATE.
  • Ошибка: Изменения не видны в админке.
    Решение: Очистите кэш сайта и браузера. При необходимости сбросьте транзиенты с помощью wp cache flush.
  • Ошибка: Потеря данных или неправильные статусы.
    Решение: Всегда делайте резервную копию базы перед массовыми изменениями и тестируйте на тестовом сайте.

Практические советы по безопасности и производительности при работе с WP-CLI

  • Используйте --dry-run или сначала выводите список постов/пользователей без изменений, чтобы проверить выборку.
  • Не запускайте массовые SQL-запросы без бэкапа.
  • Для больших сайтов разделяйте обновления на партии по 100-200 объектов, чтобы избежать таймаутов и перегрузки БД.
  • Если сервер ограничивает время выполнения, используйте WP-CLI на локальной машине с подключением к удалённой БД.
  • Обновляйте WP-CLI до последней версии для совместимости с вашим WordPress.

Сравнение вариантов массового обновления статусов постов

МетодПлюсыМинусыКогда использовать
Цикл wp post updateОтрабатываются все хуки, кэш обновляетсяМедленнее на больших объёмахКогда важна целостность данных и триггеры
SQL-запрос через wp db queryОчень быстро, простоНет запуска хуков, возможны проблемы с кэшемПри необходимости срочного массового обновления

Пример кода: массовое обновление пользовательских мета-полей

for user_id in $(wp user list --field=ID); do
  wp user meta update $user_id custom_key "new_value"
  echo "Updated user meta for $user_id"
done

Этот пример обновляет мета-данные custom_key для всех пользователей. Можно адаптировать под нужды.

Как создать автоматическую резервную копию WordPress без плагинов
09.01.2026
Как удалить заблокированные или замороженные учётные записи пользователей в WordPress
18.05.2026
Автоматический импорт продуктов из CSV в WooCommerce: пошаговое руководство
17.03.2026
Как избежать конфликтов между плагинами в WordPress
06.03.2026
Как установить ограничения на регистрацию пользователей в WordPress
24.03.2026