WordPressで、ある特定のアプリからのアクセスの時だけ別のテンプレートを使いたかった
とある仕事で、(近々リリースできると思います)、WordPressで作られたサイトの、ある特定のコンテンツだけ抜き出して、別のテンプレートで表示させたいという込み入った案件を抱えていた。
どういう条件でテンプレートを切り替えるのか
アプリからサイトを表示させるのだが、アプリのUserAgentはWebkit。特にこれといって特異なものを指定してある訳ではなかった。
方法は一つ。UserAgentで出し分けが出来なかったら、後はURLで振り分けるしか無いじゃないか。
そんな訳で、ある特定のURLで飛んできた場合のみ、指定したテンプレートで表示させるという事に決めた。
特定のコンテンツだけ抜き出す、を実現するには
サイトには、日がなコンテンツが掲載されていく。これの中の、あるカテゴリに属する記事と+αをどうしても抜き出したい。抜き出すのは、人力で構わない程度の分量なので、そこは甘えることにする。
そこで適当なのは何かというと、Custom Post Type UIだ。
一つ、カスタムタクソノミーを作り出し、そこにチェックが入っている記事のみを抜き出す事にした。そうすることで、実はURLでテンプレートを切り分けるという機能も合わせて実装することが出来る。
カスタムタクソノミーを pickup となるようにしよう。その中に一つタグを設けておく。これを forX とかにしたとすると、チェックを入れたコンテンツが抜粋されたページのURLはこうなる
http://hogehoge.jp/pickup/forx/
ここに一覧が表示される訳。簡単、簡単。
次につくるのはテンプレートファイルだ。pickup以下でアクセスした場合に適用したい。そういう場合は、自分が使っているテーマのフォルダの中に
taxonomy-pickup.php
というファイルでテンプレートを作ろう。これによって、/pickup/以下のURLはそのテンプレートで表示されるようになる。
個別記事のテンプレートを切り替えるにはどうすればいいか
ここまでで、一覧表示ページをつくることは出来た。次に問題となるのは、個別記事のページだ。いわゆる、 single.php で表示されるページ。
せっかく一覧ページを
http://hogehoge.jp/pickup/forx/
としても、個別の記事のURLが
http://hogehoge.jp/archives/hogehoge.html
となっていては、元のテンプレートで表示されてしまう。これを解決する方法がないかと思ったら、ありました。
つまるところ、記事一覧ページが生成するURLに、ある特定のパラメータを付与しなさいということ。
一覧ページのテンプレートファイル(例えばさっきのtaxonomy-pickup.php )の記事へのリンク部分をこんなかんじにします。
<a href="<?php the_permalink(); ?>?ref=pickup">
これで、?ref=pickup というパラメータがURLに付与されます。
次にいじるのがsingle.phpです。
single.phpの頭のほうで、表示の分岐を作りましょう。
<?php
// single.php の先頭 の切り替え
// pickupからの場合はこちらを呼び出す
if ( isset($_GET['ref']) && 'pickup' === $_GET['ref'] ) {
?>ここにpickupの場合のテンプレートを記入
<?php
}
//pickup版ここまで
else{ここに従来のテンプレート内容
こんなかんじです。
これだけでOK。
個人的には、single.phpに変な分岐を作りたくなかったのですが、しょうがないですね…。その他の部分でサイトスピードアップを頑張りたいと思います。
もっと効率の良いやり方を知っている人がいたら、是非教えて下さいm(_ _)m
WordPressの高速化を考えている人はこの記事もオススメです
WordPress 高速化&スマート運用必携ガイドを読んでWordPress高速化を実施したよ | いつか創造される何かは、今想像出来る未来 @geeorgey