WordPressの投稿や固定ページなどのURLの後ろに「/json」「/amp」などでアクセスできるようにエンドポイントを追加する方法

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が返ってきます)

著者:bouya Imamura