情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

WordPressをバージョンアップして本文の表示がおかしくなった理由

PHP (25) WordPress (80) WordPressテーマ (7)

WordPressのバージョンを3.3.1から3.4.1にアップデートしたところ、本文の表示が微妙に変わってしまう・レイアウトが崩れるという現象に遭遇しました

今回は、「なぜそうなったのか」「どうすれば直るのか」「どうすれば次回のアップデート時に同じ問題を起こさずに済むのか」を紹介します。同じ原因で表示がおかしくなったという人はかなり多くいるのではないかと思っています。

現象

ひと言で「本文の表示がおかしくなった」と言いましたが、実際具体的に何が起こっていたのかというと、元々なかったはずのタグが自動的に追加されていたのです。

「the_excerpt」の結果が、今まではそのまま文字列として出力されていたのですが、なぜか「<p></p>」で囲まれるようになってしまったのです。

原因

アップデートでどうして表示が変わったのか、その原因は、アップデートによって独自に編集していたdefault-filters.phpファイルが更新されてしまったからでした。

default-filters.phpを編集していたの??

default-filters.phpを編集する、というのは珍しいことではありません。とある目的でよく編集されます。その目的こそが、タグを自動追加する機能を停止するためです(他にもありますが)。

/wp-includes/default-filters.phpにある「add_filter( 'the_content', 'wpautop' );」などの行をコメントアウトすることで、そのような「お節介」と言われる機能を停止していたのです

つまり、今回の問題は、停止していた機能が復活してしまったのが原因で発生したとも言えます。

悪い対処法

ではどうすればいいかというと、もう一度default-filters.phpの該当する行をコメントアウトすればいいわけですが、これではまたアップデートしたときに再度編集する羽目になります。つまり、そもそもコメントアウトするというやり方が良くないのです。

正しい対処法

テーマファイルの「functions.php」に、「add_filter」を無効化するPHPコードを記述するのが正しい対処法です。

たとえば、

add_filter( 'the_content', 'wpautop' );

を無効化したい場合は、「add」を「remove」に置き換えた次の行を「functions.php」に追加します。

remove_filter( 'the_content', 'wpautop' );

これでコメントアウトと同じ効果が得られます

まとめ

今回のポイントは次のようにまとめられます。

WordPress本体のコードを改造しても、WordPressをアップデートすると元に戻ってしまうので、改造するならfunctions.phpを優先的に利用すること。

実は、WordPressを使い始めたときに今回のコメントアウトを仕込んでしまったのですが、しばらくしてこれが良くないやり方であると知り、それ以降はfunctions.phpを編集するようにしていました。

感想

default-filters.phpをコメントアウトする方法を解説しているサイトも多いので、今回のポイントに注意して、できるだけfunctions.phpを利用して改造することをおすすめします。

コメント(0)

新しいコメントを投稿