Optymalizacja wordpressa
Wordpress to bardzo dobre narzędzie do blogowania, ale czasem może okazać się, że nie do końca spełnia nasze oczekiwania.
Domyślnie WP zapisuje rewizje wpisów czyli za każdym razem gdy coś zmieniamy we wpisie jest tworzona historia zmian, co w prosty sposób w niedługim czasie może prowadzić do urośnięcia bazy danych do dużo większych rozmiarów niż mogłoby się wydawać po ilości opublikowanych wpisów.
Można temu zapobiec instalując odpowiednie wtyczki, ale zanim pomyślałem zacząłem pisać swoją własną.
Pisanie pluginów pod Wp nie jest sprawą trudną Wp posiada własne api dzięki któremu pisanie dodatków jest dużo łatwiejsze.
Samo działanie wtyczki sprowadza się do wykonania dwóch zapytań do bazy danych.
1 2 3 4 5 | $sql = "Delete FROM ". $wpdb->posts ." WHERE post_type = 'revision'"; $wpdb->query($sql); $sql = "OPTIMIZE TABLE ". $wpdb->posts; $wpdb->query($sql); |
Najpierw usuwamy posty, których typ to ‘revision’ a następnie z racji tego że Wp używa tabel typu MYISAM optymalizujemy tabele z postami.
Teraz wystarczy to opakować w odpowiedni kod wykorzystujący api Wp i mamy gotową wtyczkę…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <?php /* Plugin Name: Wp-cleaner Plugin URI: http://mdabrowski.net/ Description: Plugin usuwa z bazy zbędne rewizje postów. Version: 1.0 Author: Mateusz Dąbrowski Author URI: http://mdabrowski.net */ class Wp_cleaner { public function __construct() { update_option('action', $_POST['action']); update_option('delete', $_POST['delete']); if(get_option('action') == 'update' and get_option('delete') == 'all') $this->clean(); add_action('admin_menu', array( $this,'menu')); } private function clean() { global $wpdb; $sql = "Delete FROM ". $wpdb->posts ." WHERE post_type = 'revision'"; $wpdb->query($sql); $sql = "OPTIMIZE TABLE ". $wpdb->posts; $wpdb->query($sql); } public function wp_cleaner() { echo '<div class="wrap">'; echo '<h2>Wp cleaner</h2>'; echo '<p>Plugin usówa z bazy zbędne rewizje postów.</p>'; echo '<form method="post" action="options.php">'; echo '<div>'; wp_nonce_field('update-options'); echo 'Czyszczenie zbędnych postów.'; echo '<input type="hidden" name="action" value="update" />'; echo '<input type="hidden" name="delete" value="all" />'; echo '<input type="submit" class="button-primary" value="Czyść" />'; echo '</div>'; echo '</form>'; echo '</div>'; } public function menu() { add_options_page('Wp cleaner', 'Wp cleaner', 8, __FILE__, array($this, 'wp_cleaner')); } } new Wp_cleaner(); |
W konstruktorze klasy wywołujemy funkcję z api add_action(’admin_menu’, array( $this,’menu’)), która dodaje nam linka (Wp cleaner) w bocznym manu wp, dzięki czemu możemy przejść do stronki plugina.
Metoda wp_cleaner() tworzy nam formularz który jest dodawany do strony opcji funkcją Wp add_options_page(’Wp cleaner’, ‘Wp cleaner’, 8, __FILE__, array($this, ‘wp_cleaner’)), po wysłaniu formularza wywoływana jest metoda clean(), która wykonuje całą pracę.
Wtyczkę instalujemy w standardowy sposób, czyli wrzucamy do katalogu pluginów, włączamy i możemy korzystać.
Oczywiście można ściągnąć gotowe wtyczki z repo wordpressa, które są bardziej dopracowane i mają więcej opcji no i oczywiście są rozwijane (ja nie zamierzam raczej rozwijać swojej, bardziej mi chodziło o napisanie pierwszego plugina do Wp)
np. delete-revision (została niedawno zaktualizowana i posiada już opcję optymalizacji tabeli), czy revision-delete.
Polecam także wtyczkę No revision, której działanie polega na wyłaczeniu opcji zapisywania rewizji w Wordpressie a cały kod wtyczki sprowadza się do jednej linijki:
@remove_action ( ‘pre_post_update’, ‘wp_save_post_revision’ );
Powiązane wpisy:
