WordPress で与えられたパラメータによって、シングルページで適用するテンプレートを変更する方法。
Eri さんが、こんなことを言っていたのでサクッと作りました。
話を聞くと、通常の表示ページの他に印刷用のページを用意して、見た目をガラッと変えたいとのこと。
例えば、パーマリンクが http://example.com/archives/1 の場合、http://example.com/archives/1?type=print にアクセスすると、テンプレートとして single.php を読み込む代わりに single-print.php を読み込ませたい。
これは single_template というフィルターフックを利用して、通常とは違うテンプレートを読み込むようにすることで対応できます。
以下のコードをテーマの functions.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');
以下にデモを置いておきます。
- サイドバーあり(通常)
http://demo.dogmap.jp/2011/01/23/hello-world/ - サイドバーなし
http://demo.dogmap.jp/2011/01/23/hello-world/?type=simple
WordPress には、アクションフックやフィルターフックという仕組みがあるため、こんなことも簡単にできちゃいますね。
ご教授いただいたfilter hookを
custom post typeのsingleテンプレートに使ってみようしましたが
上手く効きません。
やむを得ず、singleのカスタムポストタイムをリネームして
single.phpにsingle-1.php等を付けて書き出していいます。
custom post type templateへのfilter hookの際は
filterへの登録等が必要なのでしょうか?
add_filter(‘single_template’の部分をいろいろ変えてやってみましたが効きませんでした。
ご教授いただけると幸いです。
“パラメータでシングルページのテンプレートを変更”したくてここへたどりつきました。
僕もzarumathさんと同様、カスタムポストタイプの記事に対して適用したいと考えています。
仮に、”aaa”というポストタイプのテンプレート”single-aaa.php”で表示される記事に、
印刷ボタンを設置して、別の印刷用テンプレートを使用して、レイアウトの違う印刷ページを
表示したいと考えています。
zarumathさん同様、カスタムポストタイプの”single-aaa.php”への対応をどのようにしていいか
わからないでいます。
どうかお力添えいただけないでしょうか。
よろしくお願いします。
いつも参考にさせていただいてます。
質問なのですが、私のサイトの場合、http://example.com/archives/1.htmlとなっているのですが、この場合どのようにすればうまく複数のシングルページをもてるようになりますか?
よろしくおねがいいたします。
すみません、自己解決しました。
●フィルターフックの変更
●パーマリンク設定の変更で対応できました(変える前はこんなふうにつなげて使っていました ⇒ /?p=15&type=***)
お手数をおかけしました。ありがとうございます。
少額ではありますが振込を致します。
eisuke さん、はじめまして。
自己解決されたようで良かったです。
この例はシングルページのテンプレートを変更するためのフィルターフック single_template について書いてありますが、他のテンプレートについても同様のフィルターフックを使って変更することができます。
# アーカイブページなら archive_template、固定ページなら page_template …
色々と試してみてください!
ありがとうございます!確認しました。
はじめまして、えいすけといいます。
リンク別にページのhtmlを変更したくてたどりつきました。
とても参考になりました。
ありがとうございます。
サンプルは投稿記事単体のテンプレートの変更ですがアーカイブテンプレートなどの場合は
どのように変更を加えればいいのでしょうか?
フィルターフックを変更してみましたが、うまく表示されませんでした。
よろしくお願いします。