Ustawienia i usuwanie rewizji w Wordpresie

.

Rewizje w Wordpresie są tworzone podczas zapisu nowej wersji strony lub wpisu. Informacje o nich zostają przechowywane nie tylko w tabeli wp_posts ale też kilku innych. Biorąc powyższe pod uwagę, łatwo sobie wyobrazić jak szybko cała baza danych może urosnąć do zaskakujących rozmiarów. Nieniejszy wpis ma na celu przybliżyć jak radzić sobie z rewizjami w Wordpresie oraz jak je usunąć.

Zachowanie mechanizmu tworzenia rewizje w Wordpresie można do pewnego stopnia skonfigurować w pliku wp-config.php

Poniższa linia kodu definiuje jak często ma być robiona automatyczna kopia wpisu ( wartość stałej jest w sekundach )


define('AUTOSAVE_INTERVAL', 160 );

Poniższa linia kodu spowoduje całkowite wyłączenie rewizji w Wordpresie.


define(‘WP_POST_REVISIONS’, false)

Rewizje można też ograniczyć do pewnej ich liczby (w poniższym przypadku do 5 / wpis):


define(‘WP_POST_REVISIONS’,5);

Jeżeli takie rozwiązanie nam nie wystarcza, wówczas możemy sięgnąć po gotowe rozwiązanie w postaci wtyczki o nazwie WP-optimize, która pośród licznych swoich funkcji ma również usuwanie rewizji (aktualnie posiada ona wsparcie do wersji 2.9.2 Wordpresa ale działa również z 3.0.1). Inną ciekawą alternatywą może być WP-DBManager.

Nie byłbym sobą gdybym nie dodałbym jakiegoś kodu w tym miejscu.
Tym razem jest to pare linii, które w automatyczny sposób ( wciąż konieczne jest zalogowanie się do panelu administracyjnego ) potrafią usunąć wszystkie rewizje i powiązane z nimi wartości z bazy danych oraz zoptymalizować tabele, które zostały wyczyszczone.

Kod wygląda jak następuje:


add_action('admin_init','remove_extraneous_revisions');
function remove_extraneous_revisions(){
  global $wpdb;
  $res = 0;
  $sql1 = "select ID from {$wpdb -> posts} where post_type = 'revision' limit 1";
  $sql2 = "DELETE ps,tr,pm FROM {$wpdb->posts}  ps LEFT JOIN {$wpdb->term_relationships} tr ON (ps.ID = tr.object_id) LEFT JOIN {$wpdb->postmeta} pm ON (ps.ID = pm.post_id) WHERE ps.post_type = 'revision'";
  $sql3 = "optimize table {$wpdb->posts}";
  $sql4 = "optimize table {$wpdb->term_relationships}";
  $sql5 = "optimize table {$wpdb->postmeta}";

  if(!is_super_admin()){
    return;
  }

  if( intval( date('d') ) % 5 == 0 ) {
    $res = $wpdb -> query( $sql1 );
    if($res){
      $wpdb -> query($sql2);
      $wpdb -> query($sql3);
      $wpdb -> query($sql4);
      $wpdb -> query($sql5);
    }
  }
}

Powyższy kod kasuj rewizje w momencie zalogowania się aministratora do panelu administracyjnego w dni miesiąca podzielne przez 5 (np. 5,10,15 itd. dzień miesiąca) Jeżeli ktoś potrzebuje częściej lub rzadziej, wystarczy zamienić 5 w kodzie na inną cyfrę.
Jeżeli nie zalogujemy się jako administrator 5-go dnia miesiąca, egzekucja kodu zostanie odsunięta do 10-go, potem 15-go i tak dalej.
Kasowanie i optymalizacja tabel jest wykonywana tylko wówczas gdy w bazie danych istnieją jakieś rewizje.

Kod należy umieścić w pliku functions.php. W przypadku użycia go ramię w ramię z jakimiś dodatkowymi wtyczkami oddziaływującymi na wpisy, radzę najpierw przyjrzeć się jego działaniu na lokalnym serwerze i po wcześniejszym zrobieniu kopii zapasowej bazy danych (tak na wszelki wypadek).

Więcej informacji na temat stałych nadminionych na początku tego wpisu (oraz wielu innych) można znaleźć na tej stronie Kodeksu Wordpresa.


Twój komentarz





Niektóre tagi XHTML są dozwolone
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>