last update 2019年12月15日 3:55

【WordPress】AMPページだけ特定のテンプレートに切り替える方法

久しぶりの WordPress ネタ。

基本的には調べたコードを組み合わせただけなんですが、意外とスルっと検索できなかったのでまとめておきます。

WordPress で、特定リクエストの場合だけ特定のテンプレートに切り替える方法です。

UA判定でテンプレートを切り替えつつAMP化

えーと、先日、Google さんの「とっととAMP対応しろ」みたいなイベントに呼ばれた事もあって、今さらながら AMP 化を模索中なんですね。

うちのサイトのPC版は今どき珍しくレスポンシブ非対応で、"W3 Total Cache" ってプラグインで UA を見ては、モバイル版とPC版とを切り替えているわけですが、これと WordPress 公式 AMP プラグイン「AMP for WordPress」を共存させたい、と思いまして。

PC 版はレガシー版って位置づけだからそのままにしておいて、AMPプラグインの設定から Website Mode を "Transitional" にして、モバイル版をベースにプラグインに自動で AMP 化させよう、と考えたわけです。

(※これはもう設計思想の話にはなっちゃうんだけど、そもそも、モバイル版とPC版とで同じコードを吐くのはおかしいだろ、って信念があるんだよね。)

ということで、AMP ページをリクエストされたら W3 Total Cache によるUA判定とは無関係に、強制的にモバイル版テンプレートに切り替える、という事を実装してみることに。

AMP時のみテンプレート変更するプラグイン

WordPress のテンプレートの動的な切り替えは、用途にあったプラグインがあればそちらを使うのが良いと思いますが、専用プラグインを自前で書けばより柔軟な条件に対応することもできます。

今回は、公式 AMP プラグインがインストールされている前提で、AMP ページがリクエストされたかどうかを判定し、テンプレートを動的に切り替えるプラグインにしてみました。

ソースはこんな感じ。

function theme_changer_for_amp($template) { if (function_exists('is_amp_endpoint') && is_amp_endpoint() ) { // AMPページ return 'myamptheme'; //テーマのフォルダ名 } else { // 通常ページ return $template; } } add_filter('template', 'theme_changer_for_amp'); add_filter('stylesheet', 'theme_changer_for_amp');

このプラグインは、theme-changer-for-amp.php という名称で plugins ディレクトリにインストールしておきました。

いちおう念のため言っておくと、AMP プラグインの設定で Website Mode が「Reader」の場合は、当然ですがこのプラグインは動作しません。

(※その場合、テンプレートディレクトリ内の「amp」ディレクトリのテンプレートの内容、または Reader モードのデフォルトテンプレートが適用されます。)

W3 Total Cache のUA判定との処理優先順が心配でしたが、とりあえず、手元の環境では特に問題なく動作したので、これでいいのかな、という気がしています。

UA判定不要ならこのプラグインは不要

これもいちおう念のために書いておくと、今回は UA でテンプレートを出し分けつつ AMP 対応する、というかなり特殊なケースだからプラグインを用意したのであって、UA 判定無しならこんなトリッキーなことをする必要はありません。

というのも、2019年12月時点の公式AMPプラグインは、「Website Mode」の設定次第で以下のように振る舞ってくれるからです。

  • Standard または Transitional:
    → プラグインが現在利用中のテンプレートを自動的に AMP 化しようとする(AMP非対応テンプレート・プラグイン利用時は、修正・開発が必要)
  • Reader:
    → 現在利用中のテンプレートディレクトリ内のAMPディレクトリのテンプレート、または、デフォルトのテンプレートでAMP化

つまり、UA判定をしないなら、Reader モード用のテンプレートを新規で作成するか、既存のテンプレートを Transitional モード以上の自動変換に対応させれば良いわけです。

Google としては、最終的には Standard モードへスイッチして欲しいようではありますが、WordPress のエコシステム全体がこの公式AMPプラグインを意識してくれるようになるには、まだまだ時間がかかりそうな気はします。

コメントを記入