WordPressでAMP(Accelerated Mobile Pages Project)対応ページを作成・表示するために、投稿や固定ページのURLに「/amp」と付けてアクセスしたときにAMP対応ページが表示されるようにしたいな~と思いました。
例えば以下のような感じです。
通常のURL
https://www.imamura.biz/blog/24827
AMP対応ページのURL
https://www.imamura.biz/blog/24827/amp
こんなことをするためには「add_rewrite_endpoint」を使ってエンドポイントを追加するとできることを知りました。(Automatticが開発したAMP対応ページを作成するWordPressプラグインver 0.2に書かれているコードを眺めていて知りました)
AMPの対応に限らず、今後のために使えそうなことだと思ったのでメモ書きました。機会がありましたらご参考ください。
WordPressにエンドポイントを追加する方法
Codexでは以下のコードが紹介されています。コードはご使用中のテーマフォルダ内にある「functions.php」に追記します。
add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES );
このコードを追加すると、投稿・固定ページのURLの後ろに「/json」を付けてもアクセスできるようになります。
エンドポイントを追加していない場合は「/json」を付けてもページが見つからない扱いになります。
ところで「EP_PERMALINK」「EP_PAGES」ってなんだろ?
「add_rewrite_endpoint」のパラメーターに指定している「EP_PERMALINK」や「EP_PAGES」は「どのページに対してエンドポイントを追加するのか」を指定しています。
指定できるエンドポイントの値は他にもありますので、Codexを参考にして一覧にしました。
EP_PERMALINK | 投稿のパーマリンク |
---|---|
EP_ATTACHMENT | 添付ファイルページ |
EP_DATE | 日付のアーカイブページ(年,月,日) |
EP_MONTH | 日付のアーカイブページ(月) |
EP_YEAR | 日付のアーカイブページ(年) |
EP_DAY | 日付のアーカイブページ(日) |
EP_ROOT | トップページ |
EP_COMMENTS | コメントに関するものだと思うんだけど、どう働くのか検証中 |
EP_SEARCH | 検索ページ |
EP_CATEGORIES | カテゴリーのアーカイブページ |
EP_TAGS | タグのアーカイブページ |
EP_AUTHORS | 投稿者のアーカイブページ |
EP_PAGES | 固定ページ |
その他、上記をまとめて指定できる「EP_ALL_ARCHIVES」や「EP_ALL」などもあります。
エンドポイントを追加したら反映させよう
エンドポイントを追加したら、反映させましょう。WordPressの管理画面から「設定」→「パーマリンク設定」を選択します。
パーマリンク設定のページでは特になにも変更せず、追加したエンドポイントを反映させるために「変更を保存」ボタンを押しましょう。
パーマリンク設定のページで「変更を保存」ボタンを押すだけでOK
これで追加したエンドポイントが反映されます。
お好みのエンドポイントを追加して、そのエンドポイントでアクセスしたときに何かの処理を加えたり、表示させたい時などには便利ですね。
おまけ:追加したエンドポイントでアクセスしているかどうかを判別する方法
例えばAutomatticが開発したAMP対応ページを作成するWordPressプラグインでは「is_amp_endpoint()」という関数を作って、以下のコードのように判別していました。
define( 'AMP_QUERY_VAR', 'amp' ); function is_amp_endpoint() { return false !== get_query_var( AMP_QUERY_VAR, false ); }
エンドポイントを追加すると「get_query_var」を使って「amp」のクエリ変数が取得できるので「/amp」でアクセスしているかどうかを判別することができる、という仕組みのようですね。(「/amp」でアクセスするとtrueが返ってきます)
このページを共有する