マルチサイトを移行する際につまづいたところを、自分のために書いておこう。
当サイトの WordPress を長らく更新していなかった。
更新ついでに、ダッシュボードで警告が出ていた PHPのバージョンと MySQL も更新しようとステージングサイトを用意することにした。Web に関わる仕事をしていながら ここをサボっていた理由は マルチサイトのためだ。
TORIYAMAHONPOS WordPressのまめ知識
の記事
TORIYAMA Yuko
マルチサイトを移行する際につまづいたところを、自分のために書いておこう。
当サイトの WordPress を長らく更新していなかった。
更新ついでに、ダッシュボードで警告が出ていた PHPのバージョンと MySQL も更新しようとステージングサイトを用意することにした。Web に関わる仕事をしていながら ここをサボっていた理由は マルチサイトのためだ。
TORIYAMA Yuko
DBテーブルのwp_optionsやwp_postmetaに配列っぽいデータが保存されているのを見ることがある。たとえば wp_postmetaでは_”wp_attachment_metadata”というキーに”a:5:{s:5:”width”;s:3:”145″;s:6:”height”;s:2:”74″;s:14:”hwstring_small”;s:23:”height=’65’ width=’128′”;s:4:”file”;s:35:”2010/…”というようなデータが保存されている。画象を添付した際のパスやサイズなどのメタデータである。
この形式を自分でも利用することができる。
例えばwp_optionsに保存するには、
INSERT INTO wp_options(option_id, blog_id, option_name, option_value, autoload) VALUES(null, 0, ‘my_messages’, maybe_serialize( $messages ), ‘yes’)
というようなSQLを実行すればよい。連想配列$messagesをシリアライズしたものをoption_valueにセットする。maybe_serialize()は、WordPressの関数である。
このデータを取得するには、SQLでSELECTして得た値を、
$messages = maybe_unserialize($result->option_value);
とすることで連想配列にセットされる。
ちょっとした情報を保存したいならプラグイン用にテーブルを作成するのではなく、 wp_optionsに保存する手段もあるのだ。Contact Form 7 のコードを見てて、この仕組みがやっと分かった。
TORIYAMA Yuko
WordPressをインストールする際にMySQLに作成されるテーブルのほかに、自作プラグインでもテーブルを作成することができる。アクションフックのregister_activation_hookを定義しておくとプラグインが有効になった際に関数が呼ばれるので、ここでテーブルを作成する。テーブル名にはWordPressの接頭辞を使用すること。
以下は、wp_sampleというテーブルを作成する例。
[sourcecode language=’php’]
function myActivation() {
global $wpdb;
$table_name = $wpdb->prefix . “sample”;
if($wpdb->get_var(“show tables like ‘$table_name’”) != $table_name) {
$sql = “create table ” .$table_name .” (
ID bigint not null auto_increment,
name varchar(64) NOT NULL,
furigana varchar(64) default NULL,
url varchar(64) default NULL,
primary key(ID)
)”;
$results = $wpdb->query($sql);
}
}
register_activation_hook(__FILE__, ‘myActivation’);
[/sourcecode]
プラグインが無効化された際の処理は以下を使用する。
[sourcecode language=’php’]
register_deactivation_hook(__FILE__, ‘myDeactivation_’);
[/sourcecode]
TORIYAMA Yuko
XAMPPでPerlが動くようになったものの、そう簡単にMTのインストールは進まなかった。MySQLがない模様だ。SQLiteで済ませようとしたのに、MT5からデータベースがMySQLのみになっていることにここで気づいた。
ActivePerlでMySQLをインストールしなければならない。ハードルをクリアするとまたすぐに次のハードルが現れる。ActivePerlに付いてくるPPMというツールを使うらしいのだが、実行しようとするとネットに接続中のまま「応答なし」となる。Firewallのせいということに気がつくのも時間がかかった。また今日も挫折しそうになる。
ググりまくって、PPMを実行するまえにコマンドプロンプトで
C:\>set HTTP_PROXY=http://[プロキシ名]:[ポート番号]
とするといいらしいと知った。
続けて、
C:\usr\bin> PPM install DBD-Mysql
とするとなにやらジャカジャカとインスールが始まった。コマンドプロンプトを活用するとは、ン十年ぶりのことだ。かくしてPerlでMySQLが使えるようになった。
ここからはMTのウィザードに従ってスムーズに進み、First Blogを作成するまでが完了した。