Как удалить все записи из пользовательского типа записи?

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

Я хочу удалить все записи из специального типа записей “TV-Serie”. Общее количество записей этого типа составляет 150 000. Более того, когда я пытаюсь удалить их все вручную, выбирая более 500 записей за раз, это приводит к “ошибке превышения времени ожидания”.

Есть идеи, как удалить их все?

Несколько методов или подходов, которые вы можете использовать для удаления всех записей из специального типа записей.

1 Используйте WP-CLI (интерфейс командной строки WordPress)

Если у вас есть доступ к WP-CLI, вы можете использовать следующую команду для удаления всех записей из вашего специального типа записей.

wp post delete $(wp post list --post_type=your_custom_post_type --format=ids)

Замените your_custom_post_type на слаг вашего специального типа записей. Эта команда перечислит все идентификаторы записей указанного типа, а затем удалит их по одному.

2 Удаление записей программно партиями

Для программного удаления записей в WP вы можете написать пользовательский скрипт для удаления записей партиями.

Добавьте код в файл functions.php вашей темы или в пользовательский плагин

function delete_posts_in_batches() {
    $post_type="your_custom_post_type";
    $args = array(
        'post_type' => $post_type,
        'posts_per_page' => 500, // Настройте количество записей для удаления за партию
        'fields' => 'ids', // Получите только идентификаторы записей для повышения производительности
    );

    $posts = get_posts($args);

    if ($posts) {
        foreach ($posts as $post_id) {
            wp_delete_post($post_id, true); // Установите второй параметр в true для принудительного удаления
        }
    }
}

// Вызовите функцию, чтобы начать удаление записей
delete_posts_in_batches();

Вы можете поместить этот код в файл functions.php вашей темы или в пользовательский плагин. Настройте параметр ‘posts_per_page’ в зависимости от возможностей вашего сервера, чтобы избежать ошибок превышения времени ожидания.

3 Увеличение времени ожидания сервера

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

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

Удаление больших объемов постов из пользовательского типа записи в WordPress, особенно когда речь идет о таком количестве, как 150,000 записей, может стать настоящим испытанием. Приведем несколько методов, которые помогут эффективно решить эту задачу.

1. Использование WP-CLI

Если у вас есть доступ к WP-CLI (интерфейсу командной строки WordPress), это самый простой и эффективный способ удаления постов. WP-CLI обеспечивает выполнение команд, которым не требуется загрузка всей системы WordPress.

Для удаления всех постов из пользовательского типа "TV-Serie" выполните следующую команду в терминале:

wp post delete $(wp post list --post_type=tv-serie --format=ids)

Здесь tv-serie – это слаг вашего пользовательского типа записи. Эта команда сначала получает все идентификаторы постов указанного типа, а затем удаляет их.

2. Программное удаление постов пакетами

Если у вас нет доступа к WP-CLI, можно удалить посты программно, используя PHP. Это требует написания небольшого кода, который будет обрабатывать удаление записей пакетами, чтобы избежать ошибок таймаута.

Вы можете добавить следующий код в файл functions.php вашей темы или в специальный плагин:

function delete_posts_in_batches() {
    $post_type = "tv-serie"; // Замените на ваш пользовательский тип записи
    $args = array(
        'post_type' => $post_type,
        'posts_per_page' => 500, // Настроить число постов для удаления за раз
        'fields' => 'ids', // Получать только ID постов для повышения производительности
    );

    $posts = get_posts($args);

    if ($posts) {
        foreach ($posts as $post_id) {
            wp_delete_post($post_id, true); // Второй параметр true для принудительного удаления
        }
        // Повторный вызов функции, если еще есть посты для удаления
        delete_posts_in_batches();
    }
}

// Вызов функции для начала удаления постов
delete_posts_in_batches();

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

3. Увеличение времени таймаута

Если вы все же сталкиваетесь с таймаутами, имеет смысл увеличить максимальное время выполнения скриптов и лимит памяти. Это можно сделать, добавив следующую строку в файл wp-config.php:

set_time_limit(300); // Установите время выполнения на 5 минут (300 секунд)
ini_set('memory_limit', '512M'); // Увеличьте лимит памяти до 512MB или больше

Заключение

Используйте предложенные методы для удаления постов из пользовательского типа "TV-Serie". Важно также перед началом удаления сделать резервную копию базы данных, чтобы избежать потери данных. Правильный подход обеспечит успешное выполнение операции без лишних затрат времени и ресурсов.

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

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