Интеллектуальное удаление ревизий WordPress

Я хочу очистить свою базу данных WordPress и удалить некоторые версии постов.

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

Например. Я написал пост год назад и создал 3 ревизии. Через пол года я что-то подредактировал и снова создал 4 ревизии. Интеллектуальная очистка, которую я ищу, должна очищать 2 старые версии при создании сообщения и 3 при его редактировании. Должны остаться только последние изменения.

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

Есть ли плагин или код, который делает такую ​​интеллектуальную очистку от ревизий?


person woltis    schedule 08.03.2015    source источник
comment
На дворе 2019 год, и у меня такое же желание. У меня есть страница с огромным количеством ревизий (скажем, 100), и каждый раз, когда я пытаюсь сохранить страницу, я получаю какую-то ошибку 500; Я достиг какого-то предела сервера. После ручного удаления 20 самых старых ревизий одну за другой и затратив на это несколько минут, я могу сохранить без каких-либо ошибок. Этот рабочий процесс я проделывал 10 раз, и он будет таким еще какое-то время. Вместо этого я хотел бы иметь возможность одним щелчком мыши удалять ревизии старше X.   -  person MarsAndBack    schedule 10.02.2019


Ответы (1)


Здесь я вижу три варианта:

<сильный>1. Не волнуйтесь!

Базы данных предназначены для очень эффективной работы с огромным объемом информации. Вы обязательно добьетесь значительно большей экономии производительности, профилируя свои темы/плагины или удаляя ненужные плагины.

<сильный>2. Ограничить допустимое количество изменений

Существует замечательный фильтр под названием 'wp_revisions_to_keep, который вы можете использовать для ограничения редакций для каждой публикации. Это не идеальное решение, но быстрое.

add_filter('wp_revisions_to_keep', function() { return 10; });

Или вы можете использовать это в wp-config.php для того же эффекта:

define( 'WP_POST_REVISIONS', 3 );

<сильный>3. Удаляйте исправления по ходу дела

Перед созданием новой версии выполняется проверка, чтобы убедиться, что новая версия отличается от старой. Здесь используется фильтр «wp_save_post_revision_post_has_changed» (для этого нет официальных документов).

Мы можем использовать этот хук, чтобы обновить существующий.

add_filter( 'wp_save_post_revision_post_has_changed', 'minimize_revisions' );

function minimize_revisions( $hasChanged, $lastRevision, $newRevision ) {
    if( !$hasChanged ) return false;

    $revisionTimeThreshold = 60 * 60 * 24; // One day
    $now = get_the_time('U');

    if( $now - strtotime($lastRevision->post_date) < $revisionTimeThreshold ) {

        // Update revision, rather than create a new one
        $newRevision->ID = $lastRevision->ID;
        wp_update_post($newRevision);
        return false;
    }

    return true;
}
person adomnom    schedule 08.03.2015