WordPressカスタマイズ事例

ページのスラッグを取得し、そのスラッグに応じて表示するテンプレートを変える

WordPressにおいて、ページ表示用のテンプレートを用意する方法は様々です。

WordPress本体サイトにもありますが、引用させていただきますと

  1. カスタムテンプレートファイル:管理画面で固定ページ作成するときに選択する「テンプレート」のこと
  2. page-{slug}.php
  3. page-{id}.php
  4. page.php

このような優先順位でテンプレートが選択されます。
つまりこれらのどれかを使ってテンプレートを用意するのが一般的です。
 
今回はこれに加えて、ページのスラッグを能動的に取得して、そのスラッグに応じて表示するテンプレートを変える方法のご紹介をします。
 
まず、テーマフォルダ直下に”inc”フォルダを作成し、そこに”temp-{slug}.php”というファイルを作成、そこに表示テンプレートの内容を記述します。

次に page.php に以下のように記述します。

<?php 
$slug_name = $post->post_name;

include locate_template( 'inc/temp-'.$slug_name.'.php' );

以上です。
 
以前、「自作のテンプレートパーツをインクルードする」方法をご紹介し、そのときは、get_template_part関数を使ってテンプレートを呼び出していましたが、今回は
“include locate_template”
を使ってます。
大きな違いは、get_template_part関数は引数を渡すことができませんが、”include locate_template”ならただのincludeなので、元ファイルの変数はそのまま先ファイルに引き継がれる点です。
このように、用途によって関数などもうまく使い分けてみてください。
 
 
この方法、マルチサイトWordPressを利用している場合などは、これの応用でテンプレートを変えることができます。
他ブログのスラッグを条件にして、本ブログのページを生成する、という一見マニアックですが、多店舗運営企業などでマルチサイトWordPressでサイトを運営する場合などには使える方法です。

page.php に以下のように記述します。

$url = $_SERVER["REQUEST_URI"];

include locate_template( 'inc/temp-'.$url.'.php' );

switch_to_blog関数を使ってブログを切り替えようとするとそれは面倒だし少し処理がかかるので、なまのURIを取得して処理を振り分けてしまおう、ということです。


関連するWordPressカスタマイズ事例