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


おすすめ記事一覧

 - Tips, Wordpress