2015-03-08 2 views
-1

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

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

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

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

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

ответ

0

Я вижу три варианта здесь:

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; 
} 
Смежные вопросы