このサイトは「PHP5.6」で作成し「PHP7.0」にバージョンUPしましたが、この時は問題は発生しませんでした。
今回、更に「PHP7.3」に変更した結果、画面が途中で表示されないという問題が発生してしまいました。
この時に色々対策した結果を紹介します。
1.「PHP Compatibility Checker」による互換性チェック
PHP7.3にあげる前に「PHP Compatibility Checker」を使って互換性をチェックします。
1-1.プラグイン「PHP Compatibility Checker」のインストール
新規プラグイン追加で「PHP Compatibility Checker」を指定すると下記アイコンが表示されます。
■「今すぐインストール」ボタンを挿入してインストールします。
■「有効化」ボタンを挿入して有効化します。
1-2.「PHP Compatibility Checker」を実行します。
■「ツール」メニュに追加された「PHP Compatibility」をクリックします。
1-3.スキャンパラメータを設定し、実行します
■PHPのバージョンで「PHP7.3」を選択します。
■サイトスキャンを実行します。
1-4.スキャン結果の対応
①プラグインが対応してない場合
ネットで対応策を探して下さい。
対応策が無い場合はこれを使わない運用に切り替える必要があります。
②独自テーマに警告が出る場合
スキャン結果の右にある「詳細切り替え」をクリックすると「プログラム名」と「エラー内容」が表示されます。
私の場合は、自分が作ったテーマに下記の警告が表示されました。
File has mixed line endings; this may cause incorrect results
上記のエラーは1行の終わりがおかしいよ!というメッセージです。
警告なので無視しても良いのですが、気持ちが悪いので修正しました。
<修正方法>
①エラーが出るプログラムをPC上にコピーし「EmEditor」で開く。
②エラーが出るプログラムを「EmEditor」開いて、総てを消します。
③①のプログラムを「クリップボード」にコピーし、②に張り付け保存する。
以上で行の終わりは綺麗になります。
確認する時の注意点
修正結果を「PHP Compatibility」で再チェックする時は、プラグインを総て無効化してから「再スキャン」するとスキャン時間が短くなります。
2.表示が途中で止まる対策
2-1.Web Stationの設定を変更する。
①DSMにログインして下記アイコンをクリックします
②PHP設定から「PHP7.3」のプロファイルを開きます
③下記の「PHPエラーチェック」機能をONにする。
④「OK」で保存すると「PHPエラーチェック」機能がONになります。
以上で画面の表示が止まった所のPHPプログラムが表示される様になりました。
下記に「PHP7.0」では問題なかったが、「PHP7.3」でエラーになった事例を紹介します。
2-2.プログラムの引数の受け渡し方法(致命的なエラー)
このエラーは、関数の引数の省略表示の受け渡しが、より厳密になった為のエラーです。
①「PHP7.0」の時のプログラム
<関数を呼ぶ側>
<?php my_pagenavi($wp_query);?>
■引数は省略してCALL
<関数側>
/***************************************************************************** ページネーションプログラム(WordPreessの基本機能とBootstrap機能を使っている) <引数> $wp_queryは、一般投稿は$wp_query、カスタム投稿はnew WP_Query($args)で指定した変数 $show_allは、1:すべてのページ番号を表示 0:省略表示(デフォルトは省略表示) $mid_sizeは、現在のページ前後の表示個数 デフォルトは2 ※これを変更する場合は$show_allは0にする事 *******************************************************************************/ function my_pagenavi($wp_query,$show_all,$mid_size=2)
■$show_allは指定しなくても、「0」として処理できた。
②「PHP7.3」の為に変更した箇所
<関数側>
/***************************************************************************** ページネーションプログラム(WordPreessの基本機能とBootstrap機能を使っている) <引数> $wp_queryは、一般投稿は$wp_query、カスタム投稿はnew WP_Query($args)で指定した変数 $show_allは、1:すべてのページ番号を表示 0:省略表示(デフォルトは省略表示) $mid_sizeは、現在のページ前後の表示個数 デフォルトは2 ※これを変更する場合は$show_allは0にする事 *******************************************************************************/ function my_pagenavi($wp_query,$show_all=0,$mid_size=2)
■$show_allのデフォルト値を「=0」で明示的に定義した。
2-3.メニュのクラス変更(致命的なエラー)
このエラーは、メニュークラスの変更が許されなくなった為のエラーです。
①「PHP7.0」の時のプログラム
<function.phpの設定>
/*リストクラスをカレントのみにしてBootstrapルールに合わせる*/ function my_menu_class($classes, $item ){ $classes = ''; if( $item -> current == true ) {$classes[] = 'active';} return $classes; } add_filter( 'nav_menu_css_class', 'my_menu_class', 10, 2 );
■メニュが「current」の時は、「active」というクラスを付けた。
<CSSでの設定>
#top_menu .active a, #top_menu li ul .active a{ color:white; background-color:#c7dcef;}
■CSSの設定で「active」というクラスが使えた。
②「PHP7.3」の為に変更した箇所
<function.phpの設定>
■クラス指定は廃止
<CSSでの設定>
#top_menu .current-menu-item a, #top_menu li ul .current-menu-item a{ color:white; background-color:#c7dcef;}
■カレントメニューの指定はWordPressのデフォルトクラス「current-menu-item」クラスに変更
2-4.警告に対する修正履歴
警告の場合は「致命的なエラー」でないので画面表示は停止しません。
しかしPHPがバージョンUPすると「致命的なエラー」になる可能性があります。
①関数の()が抜けていた。
間違い:is_search 正解 :is_search()
②変数の’’が抜けていた
間違い:$size = $_SESSION[windowSize]; 正解 :$size = $_SESSION['windowSize'];
③変数の’’が抜けていた
間違い:$data = $query -> query[category_name]; 正解 :$data = $query -> query['category_name'];
3.結論
Web Stationの「PHPエラーチェック」をONにすると若干レスポンスが落ちます。
しかしWordPressは常に最新版のPHPを求めていますので、定期的に「PHPエラーチェック」をONにして、警告も発生しないプログラム開発が望ましいと思います。
WordPressは下記理由からPHPは最新バージョンを推奨しています。
PHP の最新バージョンには大きく2つの利点があります。
■Web サイトがより速くなります。PHP の最新バージョンは以前のバージョンよりも効率的に動作します。最新の対応バージョン (現在は7.3) にアップグレードすると、以前のバージョンに比べてパフォーマンスが最大で3倍〜4倍向上します。
■Web サイトがより安全になります。PHP は WordPress と同様にコミュニティによってメンテナンスされています。PHP は非常に人気があるため、ハッカーの標的です。最新のバージョンには最新のセキュリティ機能が実装されていますが、以前のバージョンにはこうした機能が含まれていません。PHP のアップデートは WordPress サイトの安全性にとって非常に重要です。
さらに副次的な利点がいくつもあります。
■速い WordPress サイトは検索エンジンに高く評価されます。したがって検索ランクが上がります。
■速いサイトは訪問者の滞在時間が長くなります。訪問者は読み込みに長い時間がかかれば離脱しますが、パフォーマンスが良ければサイトはその分効果的になります。
■高いセキュリティを保つサイトはハッカーに対してより安全です。サイトがハッキングされれば対応コストがかかりますし、サイトの評判も下がります。