対策法:WordPressでテーマを選んだら真っ白になった

研究室のWordpressで、とあるユーザが「テーマを選んだら画面が真っ白になって、ダッシュボードにも入れなくなりました!!」とヘルプを求めてきたので、以下メモ。

現象としては、ライブプレビューで「deep-silent」というテーマを選んでいて、

『なんかよさそうだな―』とおもって適用したとたんに真っ白になった、とのこと。

まあここまで状況説明できるユーザならまだいいのですが、管理者としてサーバにログインできるなら、

# tail /var/log/httpd/error-log
を見てみてほしい。

今回の場合はこんなエラーが出ていました。

[Mon Feb 18 17:20:39 2013] [error] [client 223.218.158.67] PHP Parse error:  syntax error, unexpected $end in /var/www/wordpress/wp-content/themes/deep-silent/functions.php on line 409

というわけで、下手人は「deep-silent」、しかもSyntax Errorとは!
とりあえず、Googleで調べてみましょう。いちおうダッシュボードからインストールしたテーマであれば公式にあるはずです。

http://wordpress.org/extend/themes/deep-silent

[browser-shot url=”http://wordpress.org/extend/themes/deep-silent” width=”600″]

よく見ると、

This theme hasn’t been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.

って最終更新日が2009年。もう3年近く更新されていない。
こういうテーマは新しいWordpressに対応していないばかりか、作者がやる気を失っているか、お亡くなりになったか、そもそも責任感がない人の作品なので継続して使い続けるのは危ないです。

サーバーログが見れないレンタルサーバーなどであった場合、wp-config.phpでデバッグモードをONにすれば、当該ページは真っ白ではなく、エラーが表示されます。
//define('WP_DEBUG', false);
define('WP_DEBUG', TRUE);

としておけばよいでしょう。viの使い方がわからない人はWinSCPなどで編集すればいいです。

で、問題のページを開けば、真っ白ではなくエラーが出るはずです。
今回の問題はログで指摘されている通り、functions.php の書式エラーで409行にいきなり終了が現れたと。
vi ./wp-content/themes/deep-silent/functions.php
とするとviが開きますので「ESC-:-409」と打って、409行目に飛びましょう。エスケープキーを押して「:409」です。

[php]
function coba(){
global $wpdb;
if($_POST[‘send’]==’setting’){
$tmp_name =& $_FILES[‘gambar’][‘tmp_name’];
$author_id ="test";
$ext="jpg";
$name = ABSPATH . ‘wp-content/authors/’ . $author_id . ‘.’ . $ext;
@move_uploaded_file($tmp_name, $name);
@chmod($name, 0666);
}
?>
<div class="wrap">
<form action="#" method="post" enctype="multipart/form-data">
<input type="hidden" name="send" value="setting">
<table width="80%" border="">
<tr><td align="center" colspan="2"><b>Upload photo</b></td></tr>
<tr><td align="center"><input type="file" name="gambar"></td></tr>
<tr><td align="center"><input type="submit"></td></tr>
</table>
</form>
</div>
<?
}
?>
[/php]

これは…!何が間違っているかわかりますか?
下から2行目を「 (viでは、「ESC-i」として編集モードにして、書き足したら、「ESC-:wq」で書き込み終了)

環境によってはphpは
<?~?> でも通りますが、それはphp.iniで設定しないと無理ですね。

これにて一件落着!

無事にダッシュボードが見れたので、他のテーマに移行するか自分で書いてな~。