Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

Jak usunąć stare wersje WordPress: 4 kroki

Jak usunąć stare wersje WordPress: 4 kroki

Baza WordPress spuchła, panel administracyjny działa wolno, a kopia zapasowa waży tyle co archiwum średniej wielkości witryny? Najprawdopodobniej winne są rewizje, czyli szkice każdego zapisu, które silnik gromadzi latami.

Jedna strona w ciągu swojego życia zbiera dziesiątki poprawek. Proszę pomnożyć to przez setki wpisów, a otrzymają Państwo gigabajty śmieci w wp_posts. Co gorsza: rewizje są przechowywane w tej samej tabeli co opublikowana treść, więc każdy zbędny rekord spowalnia zapytania.

Poniżej cztery sposoby na wyczyszczenie bazy ze starych wersji: od bezpiecznej wtyczki po bezpośrednie zapytanie SQL. Plus dodatkowa sztuczka, która nie pozwoli śmieciom z rewizji powrócić.

💡 Szybki przegląd:

  • WP-Sweep, najbezpieczniejsza droga: wtyczka usuwa rewizje standardowymi funkcjami WordPressa, bez bezpośrednich zapytań do bazy.
  • wp-config.php, trzy linijki kodu całkowicie wyłączają lub ograniczają zapisywanie szkiców na poziomie silnika.
  • Zapytanie SQL, natychmiastowe czyszczenie jednym zapytaniem; wymaga pełnej kopii zapasowej bazy przed uruchomieniem.
  • Interwał autozapisu, nie usuwa już nagromadzonych danych, ale radykalnie spowalnia przyrost rewizji w przyszłości.

Krok 1: Usunięcie rewizji wtyczką WP-Sweep

Najprostszy i najbezpieczniejszy sposób dla tych, którzy nie chcą dotykać kodu. WP-Sweep wywołuje standardowe funkcje WordPressa (wp_delete_post_revision), wtyczka nie wysyła surowych zapytań, więc ryzyko uszkodzenia bazy jest minimalne.

Interfejs wtyczki WP-Sweep, usuwanie rewizji

Instalacja jest standardowa:

  • Proszę przejść do Wtyczki → Dodaj nową.
  • Proszę znaleźć WP-Sweep, kliknąć Zainstaluj i Aktywuj.
  • Proszę otworzyć Narzędzia → Sweep.
  • Proszę znaleźć wiersz Revisions i kliknąć przycisk Sweep.

Wtyczka pokaże, ile rewizji usunięto i ile miejsca zwolniono. Oprócz rewizji WP-Sweep potrafi czyścić komentarze spamowe, szkice autozapisu, nieużywane terminy taksonomii i osierocone pola meta, wszystko przez natywne API WordPressa.

🔗 WP-Sweep na WordPress.org

Krok 2: Wyłączenie rewizji przez wp-config.php

Jeśli rewizje nie są w ogóle potrzebne, proszę je wyłączyć jedną linijką. Proszę znaleźć w katalogu głównym witryny plik wp-config.php i dodać kod **przed linią **/* That's all, stop editing! */:

1define( 'WP_POST_REVISIONS', false );
Kod wyłączający rewizje w pliku wp-config.php

Po tym WordPress przestanie zapisywać szkice przy każdym autozapisie i kliknięciu „Aktualizuj". W bazie pozostanie tylko ostatnia wersja wpisu.

Proszę zwrócić uwagę: ta linijka nie usuwa już nagromadzonych rewizji, jedynie zapobiega powstawaniu nowych. Istniejące śmieci proszę wyczyścić Krokiem 1 lub dodatkowym zapytaniem SQL poniżej.

Aby ponownie włączyć rewizje, proszę zamienić false na true lub po prostu usunąć tę linię.

Krok 3: Ograniczenie liczby rewizji

Całkowite wyłączenie nie jest dla każdego. Jeśli trzyosobowa redakcja poprawia jeden wpis i potrzebna jest historia zmian, lepiej nie wyłączać rewizji, a ograniczyć ich liczbę.

Proszę dodać w wp-config.php przed linią /* That's all, stop editing! */:

1define( 'WP_POST_REVISIONS', 3 );

Liczba 3 oznacza: WordPress przechowuje maksymalnie trzy ostatnie wersje każdego wpisu. Czwarta edycja nadpisuje najstarszą, baza nie rozrośnie się.

Ograniczenie liczby rewizji do 3 w wp-config.php

Dla większości witryn trzech rewizji wystarczy z zapasem. Jeśli publikują Państwo długie long ready z dziesiątkami iteracji, proszę ustawić 5 lub 10. Nie ma ograniczenia, można podać dowolną liczbę całkowitą.

Krok 4: Zmiana interwału autozapisu

Domyślnie WordPress zapisuje szkic co 60 sekund. Przy aktywnej pracy nad wpisem tworzy to dziesiątki rewizji na godzinę. Interwał można wydłużyć, wtedy autozapisów będzie mniej, a baza będzie rosła wolniej.

Proszę dodać w wp-config.php:

1define( 'AUTOSAVE_INTERVAL', 600 );
Ustawienie interwału autozapisu na 600 sekund w wp-config.php

Wartość 600 to sekundy (10 minut). Przy takim ustawieniu szkic jest zapisywany w bazie raz na 10 minut zamiast co minutę. Minimum akceptowane przez WordPress to 60 sekund; zalecane maksimum to 3600 (godzina).

Ta sztuczka nie czyści istniejących rewizji, ale radykalnie ogranicza przyrost nowych. Proszę połączyć ją z limitem z Kroku 3, a otrzymają Państwo czystą bazę bez regularnego ręcznego czyszczenia.

Bonus: usuwanie rewizji zapytaniem SQL bezpośrednio

Najszybsza droga, jeśli czyszczenie wtyczką z jakiegoś powodu nie wchodzi w grę. Uwaga: zapytanie jest nieodwracalne. Przed uruchomieniem proszę wykonać pełną kopię zapasową bazy danych przez phpMyAdmin, WP-CLI lub wtyczkę do tworzenia kopii zapasowych.

Najpierw bezpieczny dry-run: proszę sprawdzić, ile rewizji zostanie objętych, bez ich usuwania:

1SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';

Jeśli prefiks tabel nie jest u Państwa wp_, proszę go zastąpić swoim (proszę sprawdzić w wp-config.php, linia $table_prefix).

Gdy upewnią się Państwo, że liczba jest akceptowalna, proszę wykonać usuwanie:

1DELETE FROM wp_posts WHERE post_type = 'revision';

Zapytanie usuwa wszystkie rewizje ze wszystkich wpisów za jednym zamachem. Po tym baza natychmiast stanie się lżejsza, szczególnie na starych witrynach z setkami stron.

Czego zapytanie nie rusza: opublikowanych wpisów, szkiców (post_status='draft'), stron, załączników, menu, kosza. Jest ono ściśle wymierzone w rekordy z post_type='revision', silnik używa tego typu tylko do przechowywania wersji.

⁉️🤔 Często zadawane pytania

Czy rewizje na pewno nie wpływają na szybkość witryny?

Wpływają, ale pośrednio. Same rewizje nie ładują się na froncie, leżą w wp_posts i zwiększają całkowity rozmiar tabeli. Na witrynie z ponad 10 000 rekordów każdy dodatkowy tysiąc wierszy spowalnia zapytania WP_Query, szczególnie jeśli nie ma pamięci podręcznej obiektów (Redis). Po wyczyszczeniu rewizji różnica jest zauważalna w panelu administracyjnym i przy zapisywaniu wpisów.

Czy usuwanie rewizji wtyczką jest bezpieczne?

WP-Sweep jest bezpieczny właśnie dlatego, że nie wysyła surowych zapytań SQL. Wywołuje wp_delete_post_revision(), tę samą funkcję, którą WordPress wywołuje przy standardowym usuwaniu szkicu. Niemniej jednak zasady „zrób kopię zapasową przed każdą operacją na bazie" nikt nie odwołał.

Co stanie się z autozapisami po wyłączeniu rewizji?

Autozapisy będą nadal działać, technicznie są one osobnym mechanizmem. WordPress przechowuje jeden autozapis na wpis (ostatni) i jest on nadpisywany, a nie gromadzony. Wyłączenie rewizji przez WP_POST_REVISIONS nie wpływa na autozapis. Natomiast zmiana AUTOSAVE_INTERVAL bezpośrednio nimi steruje.

Czy można usunąć rewizje tylko dla określonych typów wpisów?

Tak, przez filtr wp_revisions_to_keep. Proszę dodać w functions.php motywu lub w Code Snippets:

1add_filter( 'wp_revisions_to_keep', function( $num, $post ) {
2 if ( 'product' === $post->post_type ) {
3 return 0; // не хранить ревизии товаров WooCommerce
4 }
5 return $num;
6}, 10, 2 );

Ten kod wyłącza rewizje tylko dla produktów, pozostawiając standardowe zachowanie dla wpisów i stron. Do masowego usuwania już nagromadzonych rewizji konkretnego typu, tylko SQL z warunkiem po post_parent.

Czy Perfmatters zastępuje WP-Sweep?

Perfmatters, komercyjna wtyczka wydajnościowa, a zarządzanie rewizjami to tam tylko jedna z ponad 40 funkcji. Potrafi ograniczać liczbę rewizji (odpowiednik WP_POST_REVISIONS) i czyścić je harmonogramem. Ale jeśli potrzebne jest tylko czyszczenie rewizji, WP-Sweep jest całkowicie darmowy i radzi sobie nie gorzej. Perfmatters ma sens, gdy równolegle potrzebne jest leniwe ładowanie, wyłączenie skryptów emoji i inne zaawansowane ustawienia wydajnościowe.

Czy trzeba czyścić rewizje na nowej witrynie?

Na świeżej witrynie z kilkunastoma wpisami rewizje zajmują kilobajty, czyszczenie nie ma sensu. Proszę jednak wyrobić sobie nawyk: jeśli planują Państwo aktywnie prowadzić bloga, proszę ustawić limit WP_POST_REVISIONS na 3-5 już teraz. Potem nie będzie trzeba rozwiązywać problemu z nawarstwionymi danymi.

Co zastosować do Państwa zadania?

Krótka matryca:

  • Chcą Państwo bezpiecznie i szybko, bez kodu → WP-Sweep (Krok 1) + ograniczenie rewizji do 3 (Krok 3).
  • Rewizje nie są w ogóle potrzebne, pracują Państwo samodzielnie → proszę wyłączyć przez WP_POST_REVISIONS, false (Krok 2).
  • **Baza jest ogromna, wtyczka spowalnia na **hostingu → zapytanie SQL z sekcji bonusowej (bezwzględnie po wykonaniu kopii zapasowej).
  • Jest już czysto, chcą Państwo utrzymać porządek → limit rewizji 3-5 (Krok 3) + interwał autozapisu 300-600 sekund (Krok 4).

Proszę poświęcić pięć minut teraz, a baza nie będzie już puchnąć latami. A jeśli po wyczyszczeniu rewizji witryna nadal działa wolno, proszę sprawdzić inne sposoby na przyspieszenie WordPressa: buforowanie zapytań i lekki motyw często dają większy wzrost wydajności niż usuwanie rewizji.