WordPressを高速化。PHP7に変更する際のテーマやプラグインの注意点
この記事を簡単に書くと…
- PHP7でWordPressの高速化。テーマやプラグインが対応しているかが要注意
- WordPressのテンプレートタグやPHPの下位互換性のない変更点
- まずはプラグインを全て停止することで原因を特定しやすくなる
503エラーや速度の低下から解消する為に、サーバーをエックスサーバーに移転しました。
・10万ページビューまではロリポップ。それ以上はエックスサーバー
https://www.web-jozu.com/web/lolipop_xserver/
・ロリポップからエックスサーバーへのWordPressの移行(移転)の流れ
https://www.web-jozu.com/web/wordpress_xserver/
2回にわたって、エックスサーバーの利点と、サーバーの移転の流れを紹介してきましたが、今回はエックスサーバーで利用できる、PHP7のご紹介をしたいと思います。
PHP7はPHPの最新バージョンで、PHP5に比べてパフォーマンスが高くなっていると言われています。これにより、WordPressも高速に処理できるようになる。。。 以前から、早く使ってみたいと思っていました。
早速、エックスサーバーになったので、PHP7を使ってみたのですが。。。
プラグインやPHPの記述の部分でエラーが多発(^^;
今回の修正した部分を紹介します!
目次
WordPressのテーマ(PHPの記述)のエラー
使えなくなったereg()
まずはWordPressのTheme(テーマ)のエラーです。
既存のテーマをカスタマイズして使っていたのですが、何も表示されなくなってしまいました。真っ白です(^^;ソースを確認したところ、正規表現でマッチングをする際に使用していたereg()でエラーが起きていました。
ereg()はPHP 5.3.0で非推奨になり、PHP 7では使えなくなったんですね。。。
こちらはpreg_match()で置き換えることで解決します。
WordPressのthe_content()タグの不明なエラー
上記のereg()の問題が解決したあと、ページタイトルあたりまで表示されすようになったのですが、コンテンツ部分が真っ白になってしまいます。またまたソースを確認してみると、どうやらWordPressのテンプレートタグ「the_content()」がエラーを起こしているようです。
バージョンをPHP5に下げると表示されるので、PHP7が原因だとは思うのですが、原因は分かりませんでした。the_content()の中で何かのエラーが起こっているのかもしれませんね。とりあえずget_the_content()で代用することで解決します。
ただ、get_the_content()だけだと、ショートコードがそのまま表示されてしまうので、「echo $content = do_shortcode(get_the_content());」として使うことで、ショートコードも処理されるようになります。
new 文のエラー
WordPressの「search.php」で以下のような記述がされており、こちらがエラーを起こしていました。結果的に「&」を削除することで解決しました。
$allsearch = &new WP_Query(“s=$s&showposts=-1”);
↓
$allsearch = new WP_Query(“s=$s&showposts=-1”);
こちらは、new 文の結果を参照渡しで変数に代入することができなくなったのですね。
・PHP 7 下位互換性のない変更点
http://php.net/manual/ja/migration70.incompatible.php
WordPressのプラグインのエラー
無事にエラーが修正され、正常に表示されるようになったので安心していたのですが、何やらアクセス数が激減してまいました。。。
DNSの浸透までアクセスが分散されてしまっていることが原因かと思い、2~3日様子をみたのですが状況は変わらず。。。 本格的に原因を探ってみました。すると、Googleの検索結果の文章がおかしいことに気づきました。
普通にページを開くと正常に表示されているのですが、Googleのキャッシュを見てみると、なんとページタイトルだけが表示されていて、コンテンツ領域が真っ白になっています!さっきのthe_content()のエラーと同じような状態です。
しかし、こちらのページはthe_content()は使われていません。。。
そこで、Google Search ConsoleのFetch as Googleで、該当ページを確認してみました。すると、やはりコンテンツ領域が真っ白になっています。
まずはWordPressのプラグインを全て停止
ということで、WordPressのプラグインを試しに全て停止してみたところ。。。
正常にFetch as Googleで認識されるようになりました!プラグインの何かが悪さをしているようです。
一つ一つ確認したところ、コンテンツ領域が真っ白になってしまうのは「WP Spam Free」が原因でした。「WP Spam Free」はコメントスパムを防いでくれるプラグインになります。とりあえず最新バージョンも存在しないので、「WP Spam Free」は使わないことにします。
「Count Per Day」や「W3 Total Cache」も古いバージョンではPHP7ではエラーが表示されます。どちらのプラグインも、最新版ではPHP7に対応しているようで、エラーは表示されなくなりました。
私の場合、「Count Per Day」や「W3 Total Cache」は理由があって最新版にはしていなかったのですが、今後は何とか最新版で使っていくしかなさそうですね。
・wp-adminにベーシック認証をかけている場合、Count per Dayに要注意!
https://www.web-jozu.com/wordpress/wp_admin_basic/
・WordPressのプラグインでAMPの構文エラーおよびW3 Total Cacheの文字化けが起きたら
https://www.web-jozu.com/wordpress/plugin/amp_error/
GoogleのFetch as Googleでインデックスに送信
Googleの検索結果には、上記のエラーを起こしてしまっているページがインデックスされています。ということで、Google Search ConsoleのFetch as Googleで、「インデックスに送信」をしてGoogleにリクエストを出すことで、近いうちにクロールしてもらえるようになります。
今回は数十分ほどで、全ページで正しいページがインデックスされました。
・Google Search Console(ウェブマスターツール)
https://www.google.com/webmasters/tools/home?hl=ja
まとめ
今回のように、サーバーの移転とともに、PHPのバージョンが上がる場合には、別々にすることをおすすめいたします。本来はサーバーの移転と同時に、常時SSL化も同時に行いたいところですよね。
別々をおすすめする理由としては、万が一エラーが起こったり、アクセス数が減ってしまった場合に、何が原因かという特定がし辛くなってしまう為です。一つ一つ、施行していくことで、原因の特定がかなり楽になりますよね。
1. まずは同一のPHPのバージョンでサーバーの移転
2. PHPを最新のもの(PHP7)にバージョンアップ
3. 常時SSL化(https)を実施
コメントする