先日私が管理している WordPress サイトの一つを見た時、いつもと違う印象を受けました。サイトデザインも崩れていますし、投稿内容もおかしな事になっていました。突然サイトが自分の意図しない物になっていたら焦ります。
よく見るとサイトの上部に php の Warning エラーが出ていました。
Warning : Parameter 1 to ace_join() expected to be a reference, value given in ****/wp-includes/plugin.php on line 230
参照渡しがどうのこうのと書いてあるのですが、あまりに焦っていてそんな事を考えている暇はありませんでした。これらのエラーについて Google で検索してみても海外のサイトがズラリと表示されるばかり。これはもう詰んだか。5年も育ててきたサイトが一瞬にして水泡に帰したかと絶望に陥っていました。
具体的には以下の様な状態になっています。
正常な投稿もありますが、サイトデザインは若干崩れ投稿内容も「さ」という意味不明なものになっていますしカテゴリも綺麗サッパリ消え去っています。投稿内容自体も白紙になっているものもありました。データベース自体が書き換わっているような印象です。もしかして外部から攻撃でも受けたのだろうかと。
原因はプラグインだった
後から冷静に考えてみると、エラーに plugin.php と出ていますしプラグインが原因なんだろうなと思いました。改めて調査してみると一つのプラグインが原因として上がりました。
それは、「Advanced Category Excluder」というプラグインです。特定のカテゴリやページをトップページに表示させない為のプラグインです。最近はあまり活用していないプラグインだったので停止したところ、不具合だらけに陥ったサイトが完全復旧しました。
しかし、何故突然このようなエラーが起こってしまったのでしょうか。こちらが何か作業してエラーを発生させたわけでもありません。
調べてみると php のバージョンが5.2から5.3に上げるとこのようなエラーが出るとか。原因としてはバージョン5.2では許されていた php の記述もバージョン5.3では許されなくなってエラーが発生したという事です。つまりプラグインの php ファイルの記述ミスによるエラーでした。
もし、Advanced Category Excluder を活用しているのであれば、下記サイトで修正方法が紹介されています。
http://www.kens-web.com/2011/09/1288
プラグイン一つのエラーでここまでサイトが崩壊してしまうなんて恐ろしいものです。ウェブサイトが水泡に帰さなくて良かったです。これを機にデータベースのバックアップを取っておこう。