2019年5月7日、WordPress バージョン5のメジャーアップデートが出ました(5.2, Jaco)。
今回のアップデートの内容と注意点を分かりやすく解説します。
バージョン5.1系のマイナーアップデートが2週間ごとに来ると言われてたので、まちかまえていたのですが一向に来ず、『きた!』と思ったら5.2へのメジャーアップデートでした。
個人の感想はどうでもいいですね? 5.2の変更点と注意点をさっそくはじめましょう。
サイトヘルスチェック
5.1で追加されたサイトヘルス機能ですが、なにかコントロールするものではありませんでした。
これが5.2ではバージョンアップして、管理画面のメニューに追加されています。
ツール -> サイトヘルス
ステータス
WordPressのバージョンや、プラグイン、テーマ、PHPのバージョン状態など、のサイトのステータスを表示します。
サイトヘルスページをチェックするだけで個々のステータスがまとめて見れます。
それぞれの管理画面にリンクが貼られているので、サイト運用の入り口として便利です。
テーマやプラグインのアップデートや、問題点・修正点があれば
〇件の致命的な問題
〇件のおすすめの改善
が表示されるのでわかりやすいです。
https未対応などセキュリティが甘いところも指摘してくれます。
管理画面にログインしたときに、最初にこのページを確認するように習慣化すれば、安心してWordPressを運用できるでしょう。
一番上の『サイトヘルス』タイトルの右に、安心度の%も表示されます。
5.2で一番機能が強化されたのがサイトヘルスチェックです。
情報
WordPressのサイト環境の情報が表示されます。
WordPressのバージョン、プラグインのバージョン情報・使用状況、テーマのバージョン情報などWordPress環境の情報がまとめられています。
データベースやWebサーバーのバージョン情報や、定数の情報、ファイルの権限までリスト化されています。
これだけ見れば、WordPressのサイト全体の設定状況を確認できるでしょう。
サイトヘルスチェックは、WordPressの状態を一目で確認できる。
恐怖のまっ白画面の修正
PHPコードでバグがあったとき、サイトがまっ白になったことがある人は多いと思います。
それが5.2で修正されました。
PHPエラーのプロテクション
PHPコードエラーが発生するテーマやプラグインを強制的に停止するものです。少なくとも管理画面は表示してエラー対応できるようにしました。
公開ページのエラー
PHPエラーが発生したら公開ページにはこのように表示されます。
管理ページのエラー
PHPエラーで管理画面が表示されないときはこのように表示されます。
管理画面はできるかぎり表示するようですが絶対ではないので注意が必要です。
『メールを確認して』とありますが、メールが送信されないこともあります。
ぼくは、テーマのfunctions.phpでわざとエラーを出しましたがメールは送信されませんでした。
理由はwp_mail()のundefinedです。WordPressは、wp_mail()でメールを送信しますが、このfunctionを展開する前にエラーが発生すると、メール送信が失敗します。
メールが送信されなくてもビックリしないで、落ち着いて、PHPのログをみて、修正しましょう。
サーバーにアクセスして修正する作業の手順です。
- ログ解析
- エラー箇所特定
- PHPプログラムの修正
- 修正プログラムをサーバーへアップロード
PHPエラーページをカスタマイズすることもできます。
php-error.phpファイルを作成してwp-contentディレクトリにアップロードするだけです。
いまこれについての記事を編集中です。終わりしだい公開します。
開発者向けのアップデート
ここからは開発者向けの機能強化です。とくにむずかしいことはないです。
PHPバージョンの引き上げ(5.6.20)
WordPressで使うPHPの最低バージョンが5.6.20に引き上げられました。
これまでは、PHPのバージョンが低いまま使っている人のために、PHPの便利なロジックで書けないことがありました。
これで、無名関数などテーマやプラグインで安心して使えるようになります。
5.2から使えるPHPの書き方
無名関数
function名をつけずにfunctionが作成できます。
echo preg_replace_callback('~-([a-z])~', function ($match) {
return strtoupper($match[1]);
}, 'hello-world');
// helloWorld と出力します
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
名前空間(namespace)
クラスを使ったオブジェクト指向プログラミングで必須の機能です。
ネームスペースを使うことでクラス名の衝突を防ぐことができ、同じクラス名をつくることができます。
よりオブジェクト指向のプログラミングができるようになりました。
配列の書き方
やっと、いま主流になっている配列の書き方に対応しました。細かいことですが、けっこうめんどくさかったです。
$array = array(
"foo" => "bar",
"bar" => "foo",
);
$array = [
"foo" => "bar",
"bar" => "foo",
];
ほかにもありますが、とりあえず代表的なことだけ挙げました。くわしくはこちらをどうぞ。
プライバシーポリシーページ
WordPressのバージョン4.6から、プライバシーポリシーページ機能が追加されました。そのバージョンアップです。
まずはプライバシーページの作り方の復習から。
最初に、固定ページでプライバシーポリシーページを作成します。そして、『設定 -> プライバシー』メニューで、作成したページをプライバシーポリシーのページとして指定します。
作業はこれだけです。
で、ここからが5.2でバージョンアップの部分です。
is_privacy_policy()の追加
PHPプログラムで、プライバシーポリシーページの判断ができるようになりました。
is_post()
is_page()
のプライバシーポリシーページ版の追加です。
ただし、このfunctionは『undefined fatal error』を引き起こすこともあるので気をつけましょうという注意書きがあります。
エラーになるときなど、自分で追加する方法もあります。
if ( ! function_exists( 'is_privacy_policy' ) ) {
function is_privacy_policy() {
return get_option( 'wp_page_for_privacy_policy' ) && is_page( get_option( 'wp_page_for_privacy_policy' ) );
}
}
テンプレートの追加
プライバシーポリシーページ用のテンプレートが追加されました。
privacy-policy.php
このファイルをテーマのホームディレクトリ(functions.phpと同じところ)に置くだけです。
これは、プライバシー設定画面で指定した固定ページよりも優先されます。テンプレートがなければ、設定画面で指定した固定ページが使われます。
page.phpファイルをコピーして、privacy-policy.phpを新規作成してからオリジナルのプライバシーポリシーページを作りましょう。
CSSクラスの追加
プライバシーポリシーページに、新しいCSSクラスが追加されました。
このクラスは、指定した固定ページ or テンプレート(privacy-policy.php)に自分で書く必要はありません。
WordPressが自動的に追加します。
privacy-policy
設定画面で指定した固定ページ or テンプレート(privacy-policy.php)のhtmlの<body>タグのclass属性に追加します。
これをつかって、プライバシーポリシーページ独自のページの装飾を行ないます。
menu-item-privacy-policy
『外観 -> メニュー』でプライバシーポリシーページへのリンクをメニューに追加したときにつかいます。
メニューのhtmlの<li>タグで、プライバシーポリシーへのリンクのところだけ、class属性に『menu-item-privacy-policy』を追加します。
メニューにアイコンを追加するなど、CSSで装飾をつけることができます。
wp_body_openフックの追加
wp_head(), wp_footer()の<body>タグ先頭バージョンです。使い方も同じです。ただ使う場所がちがうだけです。
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
バージョン5.2より前のバージョンも対応するなら、
<body <?php body_class(); ?>>
<?php
if ( function_exists( 'wp_body_open' ) ) {
wp_body_open();
} else {
do_action( 'wp_body_open' );
}
?>
バージョン5.2からwp_body_open()が追加されたので、なかったらdo_actionを実行します。
もうひとつ、wp_body_open()を作ってしまうという方法もあります。
if ( ! function_exists( 'wp_body_open' ) ) {
function wp_body_open() {
do_action( 'wp_body_open' );
}
}
これをfunctions.phpなどに追加すればいいです。
wp_body_open()の中身は、wp_body_openフックのアクション実行だけです。(wp-includes/general-template.php)
個人的にはdo_action()でいいじゃないか? と思わくもないですが、wp_head()などと同じようにしたいんでしょうね?
そっちのほうが分かりやすいし。
JavaScriptのビルド環境
エディタがgutenbergになったので、WordPressの開発はJavaScriptを使う機会が増えています。
ますますJavaScriptのビルド環境が重要になりました。そのバージョンアップです。
Node.jsのnpmコマンド(or yarn)で@wordpress/scriptsをインストールするだけです。
npm install --save-dev @wordpress/scripts
これで、webpackとBabelが設定済みの状態でインストールされて、ほかの作業はなにもせずに使えます。
もちろん、Node.jsのインストールが必要です。いまのJavaScriptはNode.jsありきなので『言われなくても分かっとるわい!』だと思いますが。
webpackはJavaScriptのビルドツールで、いま、いちばん使いやすいと言われる有名なツールです。WordPressでも採用されています。
Babelは、NextJSと呼ばれる、まだ採用されていない、将来のプログラムの書き方で書いたものを、任意のJSのコーディングレベルに変換するツールです。
webpackのプラグインです。WordPressのJavaScriptの開発は、NextJSで書かないと複雑なプログラミングになります。
これを機にNextJSでの書き方に慣れましょう。
(コーディングレベルが高いほどかんたんで書きやすくなります。)
webpackとBabelの公式ページへのリンクを貼りましたが、インストールは不要です。
Node.jsのコマンドで@wordpress/scriptsをインストールするとwebpackとBabelの設定済み環境がインストールされます。