WordPressのカスタマイズを行っていると、記事の内容によってページの出し分けをするためにページのテンプレートをいじり、手動でテンプレートを指定することがあります。
ですが、アクティブパラメータをURLに付与して、一つの投稿ページでテンプレートを出し分けする方法があります。
もちろん、この方法でパラメータを付与して、コンテンツの出力もコントロールするので、重複コンテンツのペナルティが発生しないよう、 rel=”canonical”
でURLを統一にする対応が必要ですが、検索流入を意図していない noindex
を付与した広告用のLPにこの方法を使い A/Bテストを行うなど、色々な活用ができると思います。
そこで今回は、プラグイン無しでアクティブパラメータを付与して投稿ページのテンプレートを出し分けする方法についてご紹介します。
実装のサンプル
このページのURLの末尾 に ?info=test1column
のパラメータを付与することで、以下のようなこのページの1カラムのテンプレートに切り替えたバージョンが閲覧できます。
アクティブパラメータとは?
パラメータは、サーバー側で動くプログラムに情報を送るために、URLの末尾に付け加える文字列です。
上記の正しいURLの末尾に、「?(クエスチョンマーク)」を付けて、複数の値を指定する場合は「&」で「変数=値」をつないでいきます。
このパラメーター付のURLにはパッシブパラメータと、アクティブパラメータの2種類があります。
パッシブパラメータ
パッシブパラメータが付与されたページでは、コンテンツの内容は変化しません。
Goolge analyticsのトラッキング用パラメータがこれにあたり、どのページから自社のサイトへアクセスしたのかを計測するために、URLの末尾に付け加えるパラメータを「パッシブパラメータ」と呼びます。
アクティブパラメータ
アクティブパラメータは、指定した値によってコンテンツの内容が変化し、商品ページでカラー別のページが生成されるECサイトでよく見られます。
その為、同じ商品を色やサイズによって、異なるパラメータURLで管理している場合、rel=”canonical”
を設置して、クローラーにどのページを優先的にクロールしてほしいかを伝えることが必要なのはこの為です。
コピペ用コード
コピペ用コードをfunctions.php
に貼り付けするだけで完成ですが、間違った記述を行うと全ての画面表示が真っ白になったりするので注意しましょう。
コピペの前の準備
まず、コピペ用の記述とは別に、パラメータで表示させたいテンプレートファイルを作成する必要があります。
表示させたいテンプレートファイルは、デフォルトで使用する single.php
をコピーするなどして、ファイル名を single-XXXXX.php
の名前で保存し/wp-content/themes/
の使用しているWordPressテーマの階層に保存します。
ここでつけた single-XXXXX.php
の XXXXX の名前の部分が、表示させるパラメータになります。
通常の投稿ページ用のコード
以下のコードをコピペして、URLの末尾に ?info=XXXXX
を記述すると、投稿ページで指定したテンプレートをパラメータで呼び出して出力します。
コードを表示する
function shop_template_switch($template) {
$new_template = $template;
if (isset($_GET['info'])) {
$new_template = 'single-' . esc_html($_GET['info']) . '.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', 'shop_template_switch');
カスタム投稿ページ用のコード
カスタム投稿タイプで出力する場合は、以下のコードを functions.php
に貼り付けします。
以下は seminar
と言うカスタム投稿タイプの例です。
コードを表示する
function shop_template_switch($template) {
$new_template = $template;
$post = get_queried_object();
if (is_singular( 'seminar', $post)) {
if (isset($_GET['info'])) {
$new_template = 'single-' . esc_html($_GET['info']) . '.php';
if (is_array($template)) {
$new_template = array(
$new_template,
isset($template[1]) ? $template[1] : 'single-seminar.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', 'shop_template_switch');
参考サイト
参考パラメータとは?ペナルティを避けるためのURLパラメータ活用法を伝授!PINTO!