WordPressでは自前のPHPコードをmy-hacks.phpというファイルに書いていたらしいんですが,バージョン2.8からmy-hacks.phpは使わないのがデフォルトになりました。このmy-hacks.phpを代替する必要があったので調べてみました。
ことの発端は,WordPressにメールで記事投稿できるようにするプラグインの「Ktai Entry」をいれようとしたことでした。プラグインのインストール・設定はうまくいったんですが,登録ユーザー以外のメールアドレスを追加しようとしてハマりました。
Ktai EntryのQ & Aにこういうところがあります。
「投稿許可アドレスを別途定義する」
ウェブログ登録ユーザーのメールアドレス以外から投稿を受け付けたいときは、validate_address フィルターを使うと可能です。my-hacks.php に以下のコードを書いてください。$authors 配列は、許可するメールアドレスと対応するユーザー ID を示すものです。適宜修正してください。 function ke_another_author($user_id, $address) {
$authors = array(
‘foo@example.com’ => 1,
‘bar@example.net’ => 4,
);
return isset($authors[$address]) ? $authors[$address] : $user_id;
}
add_filter(‘validate_address/ktai_entry.php’, ‘ke_another_author’, 10, 2);
ここで,my-hacks.phpを使う必要が出てきました。でもよくよく調べると,my-hacks.phpはWordPress2.8以降ではデフォルトで使えない。さらに調べると,my-hacks.phpをプラグインとして,使う方法がありました。
参考「Bye Bye my-hacks.php?」
以下のフォーマットでmy-hacks.phpを書いて,プラグインディレクトリに置くだけでプラグインとして認識されます。
<?php
/*
Plugin Name: my-hacks.php
Plugin URI: http://
Description: my-hacks.php – replacement since WordPress 2.8
Author: DU
Version: 0.1
Author URI: http://
/
/*
* put your hacks here
*/
?>
一番上の部分のコメントのところでプラグインの基本情報を記述します。この部分があると,プラグインのところに表示されます。こんな感じでちゃんとプラグインとして認識しています。
今回したいのは,Ktai Entryで送信元アドレスを追加することなので,以下のように書いたmy-hacks.phpを作りました。
<?php
/*
Plugin Name: my-hacks.php
Plugin URI: http://
Description: my-hacks.php – replacement since WordPress 2.8
Author: DU
Version: 0.1
Author URI: http://
/
function ke_another_author($user_id, $address) {
$authors = array(
‘hoge@hogehoge.jp’ => 4,
);
return isset($authors[$address]) ? $authors[$address] : $user_id;
}
add_filter(‘validate_address/ktai_entry.php’, ‘ke_another_author’, 10, 2);
?>
これで上手くいくかとおもったら,今度はWordPressの挙動がおかしくなりました。ログインしようとしてもページが更新されなかったり,記事を削除しても,白い画面が出たきり進まなくなったり。原因は自分で書いたmy-hacks.phpの文字コードでした。
sshでレンタルサーバーにログインして,emacsでmy-hacks.phpファイルを作ったんですが,文字コードがなぜかShift-JISになってました。これをデフォルトの文字コード(多分UTF-8)にしました。これでちゃんと動くようになりましたー!!
まとめ
WordPress2.8以降では,my-hacks.phpをデフォルトではサポートしなくなりました。なので,自分でmyhacks.phpをプラグインとして導入する必要があります。上のフォーマットで書いたファイルをプラグインディレクトリ(おそらくはwp-content/plugins)に置いて,プラグインを有効にすれば使えるようになるはずです。このときファイルの文字コードには気をつけてください。