wp-lessons.ru wordpress WP-Lessons

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

Диагностика задачи: зачем массово изменять связанные посты

В крупных проектах на WordPress часто возникает потребность массово обновлять связи между записями — например, менять категории, назначать новые мета-данные или корректировать поля пользовательских типов записей. Ручное редактирование через админку не подходит из-за объёма и риска ошибок. WP-CLI позволяет решать эти задачи быстро и безопасно.

Как подготовиться к массовому изменению связанных постов через WP-CLI

Проверка доступа к WP-CLI и версии

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

wp --info

Она выведет текущую версию и настройки CLI. Для работы с постами важна версия не ниже 2.0.

Создание резервной копии базы данных

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

wp db export backup_before_mass_update.sql

Это позволит откатиться при ошибках.

Пошаговое решение: массовое обновление связанных постов

Пример задачи: изменить категорию для всех постов определённого типа

Допустим, нужно заменить категорию с ID 5 на категорию с ID 10 для всех записей типа product.

Шаг 1. Получаем ID постов с категорией 5

wp post list --post_type=product --category=5 --field=ID

Результат — список ID постов, которые нужно обновить.

Шаг 2. Массовое обновление категорий

Скрипт bash для обновления категорий:

for post_id in $(wp post list --post_type=product --category=5 --field=ID); do
  wp post term remove $post_id category 5
  wp post term add $post_id category 10
  echo "Updated post $post_id"
done

Этот цикл последовательно удалит старую категорию и добавит новую к каждому посту.

Шаг 3. Обновление мета полей (если нужно)

Чтобы обновить мета-данные, например, изменить значение _related_post, используйте:

wp post meta update 1234 _related_post 5678

Для массового обновления замените ID и значения в цикле, аналогично примеру выше.

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

Проверьте, что у постов изменились категории и мета-данные:

wp post term list 1234 category
wp post meta get 1234 _related_post

Также можно вывести количество постов с новой категорией:

wp post list --post_type=product --category=10 --field=ID | wc -l

Сравните с изначальным количеством постов.

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

  • Ошибка: «Error: Term does not exist»
    Причина: категория с указанным ID отсутствует. Проверьте список категорий wp term list category.
  • Ошибка доступа к WP-CLI
    Убедитесь, что пользователь имеет права на выполнение команд, и что WP-CLI установлен корректно.
  • Неправильный тип записи
    Проверьте, что указан корректный --post_type с помощью wp post type list.
  • Скрипт не обновляет все записи
    Возможна пагинация. Добавьте параметр --posts_per_page=-1 в команду wp post list для получения всех постов.

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

  • Перед запуском скриптов на продакшене тестируйте их на копии сайта.
  • Для больших объёмов данных разбивайте обновления на партии, чтобы избежать таймаутов и перегрузки сервера.
  • Используйте транзакции базы данных, если возможно, для отката при ошибках.
  • Отключайте кэш и CDN на время массовых изменений, чтобы избежать рассинхронизации.

Сравнение методов массового обновления связанных постов

МетодПлюсыМинусы
WP-CLI скриптыБыстро, гибко, без UI, подходит для автоматизацииТребуется доступ к серверу, базовые навыки командной строки
Плагины массового редактированияУдобный UI, подходит для непрофиМожет быть медленнее, ограничен функционалом
SQL-запросы напрямуюМаксимальная скорость, контрольРиск ошибок, сложность, требует глубоких знаний
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше