とりあえず問題なく稼動している WordPress + Sqlite 。
Sqlite は組み込み型のデータベースエンジンなので、データは単一ファイルに格納される。
これを保存しちゃえばバックアップになるかなと思い、勉強を兼ねて簡単なプラグインをつくってみた。
MyBlog.sqlite をダウンロードするだけのプラグインです。
(リストアはFTPでアップすれば元通りの無責任設計。)
>> sqlite-backup.php
<?php /* Plugin Name: Sqlite Backup Plugin URI: https://cathval.com/ Description: Sqlite Backup Plugin. Version: 0.1.0 Author: cathval.com Author URI: https://cathval.com/ */ if (isset($_POST['backup'])) { header('Content-Disposition: attachment; filename="'.basename(FQDB).'"'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.filesize(FQDB)); readfile(FQDB); exit(); } load_plugin_textdomain('sqlite-backup',false,basename(dirname(__FILE__))); add_action('admin_menu', 'sqlite_backup_admin_menu'); function sqlite_backup_admin_menu() { add_options_page('Sqlite Backup Options',__('Sqlite Backup','sqlite-backup'),8,basename(__FILE__),'sqlite_backup_options_page'); } function sqlite_backup_options_page() { if (DB_TYPE == 'sqlite') { ?> <div class="wrap"> <h2>Sqlite Backup</h2> <form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>"> <p><?php echo sprintf(__('Backup Sqlite Database File - [%s]','sqlite-backup'),FQDB); ?></p> <p class="submit"> <input type="submit" name="backup" value="<?php _e('Backup','sqlite-backup'); ?>" /> </p> </form> </div> <?php } else { ?> <div class="wrap"> <h2>Sqlite Backup</h2> <div class="error"><p><?php _e('Sqlite is not found.','sqlite-backup'); ?></p></div> </div> <?php } } ?>
短いコードのクセに翻訳対応だw
プラグインの書き方についてはネット上に優秀な解説サイトが沢山あるので割愛。
自分のような初心者が陥りやすそうな点は load_plugin_textdomain() の使い方。
- 第2引数は「WordPressのインストールディレクトリからの相対パス」
- 第3引数は「WordPressのプラグインディレクトリからの相対パス」
のようですが、第3引数が使えるのはWordPressのバージョン2.6から。
それ以前の場合は、
load_plugin_textdomain('sqlite-backup','wp-content/plugins/'.basename(dirname(__FILE__)));
インストールディレクトリからプラグインのパスを指定するとか、
$domain_name = 'sqlite-backup'; $locale_name = get_locale(); $mofile_name = dirname(__FILE__); $mofile_name .= "/$domain_name-$locale_name.mo"; load_textdomain($domain_name, $mofile_name);
load_textdomain() でファイル名を指定するなどのやり方があるようです。
もちろんこれらの方法は上位バージョンでも動くかと思います。
ちなみに上記のコードは sqlite-backup.php と同ディレクトリの sqlite-backup-ja.mo を呼び出します。
(wp-config.php に define (‘WPLANG’, ‘ja’); が設定されている場合)
次回は翻訳ファイルの作り方~