[WordPress]投稿記事のURLの後ろに?type=○○○ とつけて通常とは違うテンプレートを読み込む

ワードプレスで、シングルページ(投稿記事)に適用するテンプレートを変更する方法。


dogmap.jp さんで、僕が前々からワードプレスでしたかったことを書かれていたので、参考にさせていただき実装してみました。これはとてもやりたかったことだったので、ほんとうれしかったです。
忘れないように実装方法をメモしておきます。

これはWordPressでポータルサイトを構築するには欠かせない機能だと思いますよ。

パラメータでシングルページのテンプレートを変更 : dogmap.jp

簡単に言うとsingle.phpにいろんなページをくっつけることができるようになります。

実装例:こんな感じに実装したい!

例えば、通常の投稿ページにカスタムフィールドで地図情報や、メニュー、写真などのギャラリーなんかを含めて投稿するとします。
他にも、印刷プレビュー用のページも表示したい場合もあるかと思います。
なのでこれを「食べログ」なんかにあるような、別ページのような感じで表示します。

食べログ参考ページ ちょっと奥の家庭料理。義SHINSAIBASHI
ここの写真ギャラリーやメニュー、印刷プレビューページを表示 などですね。

URLで言うとこんな感じに。

  • 地図情報を表示するページ
    http://example.com/category/1/?type=map
  • メニューを表示するページ
    http://example.com/category/1/?type=menu
  • 写真などのギャラリーを表示するページ
    http://example.com/category/1/?type=gallery
  • 印刷プレビューを表示するページ
    http://example.com/category/1/?type=print

という感じで投稿記事のURLの後ろに?type=○○○ とつけて通常とは違うテンプレートを読み込むようにします。
これで同一記事内で様々なページがつくれますね。

以下カスタム方法です。

読み込みたいテンプレートを作る。

single.php を複製して、「single-map.php」や「single-menu.php」のように作って、中身を読み込みたい内容に変更します。

使用テーマ内の functions.php に以下を記述。

<?php // シングルページで適用するテンプレートを変更
function single_template_switch($template) {
    $new_template = $template;
    if (isset($_GET['type'])) {
        $new_template = 'single-' . esc_html($_GET['type']) . '.php';
        if (is_array($template)) {
            $new_template = array(
                $new_template,
                isset($template[1]) ? $template[1] : 'single.php'
                );
        } else {
            $new_template = preg_replace('/[^\/]+\.php$/i', $new_template, $template);
            if (!file_exists($new_template)) {
                $new_template = $template;
            }
        }
    }
    return $new_template;
}
add_filter('single_template', 'single_template_switch');
?>

表示したい(読み込みたい)テンプレートにリンクする。

あとは作ったsingle-○○○ にアクセスするだけですね。
急いでつくったのですが、これでとりあえずはリンクされていて表示されるので問題ないと思います。
ループ内に以下を参考に記述してください。

<a href="<?php the_permalink(); ?>?type=map" title="地図を表示">地図を表示</a>
//この例だと single-map.php を読み込みます。

こういったことができると、食べログの店舗情報ページにあるような、
投稿記事(single.php)内で、印刷プレビュー用ページや地図専用ページ、口コミ用ページなんかが作れるようになり、ワードプレスでサイト構築する際の幅が広がりますね。

ベースカラーを変えたデザインにスウィッチさせてみたりなど、他にも色々な使い方ができると思います。

こんなことまでできるなんて、ほんとワードプレスはなんでもできちゃいますね。

“[WordPress]投稿記事のURLの後ろに?type=○○○ とつけて通常とは違うテンプレートを読み込む” への3件の返信

  1. この記事を参考にさせてもらい大変助かっています。

    そこで一つ質問なのですが、http://example.com/category/1/?type=printとしたものをhttp://example.com/category/1/printというURLで表示させることは可能でしょうか?

    htaccessなど色々と触ってみたのですが、上手くいきません。
    何か解決方法などありましたらご教授願いたいと思います。

    1. >>そこで一つ質問なのですが、http://example.com/category/1/?type=printとしたものをhttp://example.com/category/1/printというURLで表示させることは可能でしょうか?
      ということなんですが、実装は可能のように思うのですが、現状の私の知識では実装方法が思いつきません。
      もしかすると、function.phpをさわるとできそうな感じもするのですが、多分としか言えません。

      お力になれず申し訳ないですm(__)m

      また、なにかございましたらお気軽にどうぞ^^

コメントは受け付けていません。