Массовое удаление пользовательского типа записи и его вложений с помощью wp-cli?

Вопрос или проблема

У меня есть пользовательский тип записи под названием “встречи”, и я хотел бы массово удалить все записи и все их прикрепленные изображения…

Можно ли это сделать с помощью wp-cli?

Спасибо!

Для этого вы можете использовать wp post list и передать вывод в wp post meta delete с помощью xargs.

Вот пример команды для удаления избранных изображений в типе записи meetings:


wp post list --post_type= meetings --fields=ID --format=csv | xargs -I % wp post meta delete % _thumbnail_id

Вы можете использовать wp post meta list для записи, чтобы получить названия полей, которые вы хотите удалить, и соответственно изменить команду выше.

Я знаю, что вы спрашивали, как сделать это через wpCLI, но вы можете просто запустить функцию для этого:

add_action( 'before_delete_post', 'delete_all_attached_media' );

function delete_all_attached_media( $post_id ) {

  if( get_post_type($post_id) == "meetings" ) {
    $attachments = get_attached_media( '', $post_id );

    foreach ($attachments as $attachment) {
      wp_delete_attachment( $attachment->ID, 'true' );
    }
  }

}

Добавьте эту функцию в ваш functions.php, а затем, когда вы в админке, выберите все свои типы записи “встречи” и удалите. Когда вы очистите корзину, эта функция сработает и удалит все прикрепленные файлы, связанные с удаляемыми записями.

Ответ или решение

Чтобы массово удалить пользовательский тип записей "meetings" и все его вложения с помощью WP-CLI, вам понадобятся несколько команд, которые вы можете выполнить непосредственно из командной строки. Давайте разберем этот процесс шаг за шагом.

Шаг 1: Подготовка к удалению

Перед тем как приступить к удалению, настоятельно рекомендуется сделать резервное копирование вашей базы данных. Это позволит вам восстановить данные в случае, если что-то пойдет не так.

Шаг 2: Удаление вложений (attachments)

Вам нужно сначала удалить все вложения, ассоциированные с постами пользовательского типа записей "meetings". Для этого вы можете использовать следующие команды:

  1. Удаление постов meetings и их вложений

    Используйте следующую команду для получения списка всех постов с типом meetings и удаления каждого вложения.

    wp post list --post_type=meetings --fields=ID --format=ids | xargs -I % sh -c 'wp post list --post_type=attachment --post_parent=% --fields=ID --format=ids | xargs wp delete --force; wp delete % --force'

    Объяснение команды:

    • wp post list --post_type=meetings --fields=ID --format=ids — Эта команда получает все идентификаторы постов типа meetings.
    • xargs -I % sh -c '...' — Здесь каждая запись из предыдущей команды подставляется вместо знака %.
    • Внутри фигурных скобок мы сначала получаем все вложения для каждого поста (wp post list --post_type=attachment --post_parent=% --fields=ID --format=ids) и удаляем их с помощью wp delete --force, а затем сам пост тоже удаляем.

Шаг 3: Подтверждение удаления

После выполнения команд убедитесь, что все посты и вложения были успешно удалены. Вы можете использовать следующую команду для проверки:

wp post list --post_type=meetings --fields=ID

Если список пуст, значит, все посты были успешно удалены.

Дополнительные советы

  • Проверка наличия вложений: Перед удалением вложений, вы можете просмотреть их, используя команду:

    wp post list --post_type=attachment --post_parent=<ID_поста>
  • Удаление постов с определенными атрибутами: Если вам нужно удалить посты на основе определенных метаданных, вы можете добавить дополнительные фильтры в команду wp post list.

  • Автоматизация: Чтобы обеспечить автоматизацию при удалении вложений (например, при удалении постов через панель администратора), вы можете воспользоваться функцией, добавив код в functions.php вашей темы, как показано в примерах.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...