*

WordPressでリンク元によってデザインを変える、phpでリンク先に変数を送る方法

公開日: : WordPress

WordPressでリンク元によってデザインを変える

ちょっと変わったケースの依頼で1つの WordPress に2つのサイトを共存させ、一部ページは2つのサイトで共通に使いたいというものがありました。ようするに1つの WordPress 管理画面で2つのサイトを管理したいという事です。

WordPress にはマルチサイト機能というものがあって技術的には可能です。しかし、管理画面をなるべく煩雑にせず簡単に、サイト規模的にもそこまでする必要はないだろうと思って別の方法をとる事にしました。

ページを共通で使う為には?

一つのページを2つのサイトで共通に使う為には、アクセスしてきたサイト(リファラ)によってデザインを合わさなくてはいけません。ちなみにサイト構成は以下のような感じです。

サイトA : http://example.com/
サイトB : http://example.com/new-site/

最初はリファラを取得して、new-site が含まれていたらヘッダーを読み換える事を検討しました。以下のような事でできます。

if(strstr($_SERVER['HTTP_REFERER'],"new-site")) $design = 1;

strstr 関数は文字列の中から指定文字列が含まれているかどうか調べるものです。含まれていたら desgin 変数に1を代入します。

しかし、リファラというものは常に取得できるものではありません。閲覧者側の設定により取得できない事もあり、その場合意図しないデザインが読み込まれてしまう場合があります。その為、次の方法としてリンク先に変数を送るようにしてみました。

phpでリンク先へ変数を送る

php でリンク先へ変数を送る方法は意外と簡単で、a タグに設定するリンク先を次のようにします。

<a href="common.html?design=1">共通ページ</a>

?より先はパラメーターで変数の代入式を書いています。?より先はリンク先に影響しません。パラメーター付きリンクでリンク先へ飛ぶと当然 URL は以下のようになります。

http://example.com/common.html?design=1

こうなっていると php でパラメーター部分を変数として取得できるのです。例えばサイトB からの共通で使うページへのリンクをパラメーター付きリンクにすれば、それだけでリンク元によって条件分岐できる変数を得る事ができます。

if($_GET['design'] == 1) $chk = 1;

URL のパラメーターから php で変数として受け取るには「$_GET」を使います。カッコの中にはパラメーター名を書きます。ここではパラメーターの design が1だったら chk 変数に1を代入しています。

変数によってヘッダーを読み換える

条件分岐の変数を得ることができたので、あとはヘッダーを読み換えるだけです。これでリンク元によってデザインを変えられます。

WordPress でヘッダーを読み込むには「get_header();」が使われますが、通常 header.php が読み込まれます。しかし、現在使用しているテーマフォルダに「header-design.php」というファイルをアップロードしておいて「get_header("desgin");」でヘッダーを読み込めば「header-design.php」が読み込まれます。

まとめると以下のようにすればリンク元によってデザインを変えられるわけです。

if($_GET['design'] == 1) $chk = 1;
if($chk == 1){
   get_header("desgin");
}else{
   get_header();
}

パラメーター付きURLがGoogleにインデックスされる可能性がある

パラメータ付き URL を使うと、パラメーター付き URL がインデックスされてしまう可能性があります。もしかしたら両方がインデックスされてしまう事もあり得ます。こうなると、重複コンテンツ扱いになったり Google によりペナルティを受けてしまう事もあります。これを避けるためには、最初からヘッダーに以下のタグを入れておきましょう。

<link rel="canonical" href="<?php echo get_the_permalink(); ?>" />

canonical は正式な URL を検索エンジンに伝えるタグです。パラメーター付き URL は除外してくださいよと最初から伝えておきます。「get_the_permalink();」は現在の表示しているページの URL を取得する関数ですが、パラメーターは無視されます。その為パラメーターなしの URL を正式な URL として設定する事ができるのです。

おわりに

php でリンク先に変数を送ってページデザインを分岐させる方法でした。しかし、ページデザインを変える程度にパラメーターに使うなら問題ありませんが、パラメーターは誰でも見られるという事に注意しなくてはいけません。例えば個人情報など見られてはいけない情報をパラメーターで分岐させる構造だと容易に第三者に見られてしまいます。パラメーターは誰でも変えられてしまいますからね。今回使ったパラメーターを変更しても特に何も起きないので大丈夫です。

  • Pocket

おすすめトピックス

関連記事

ダウンロードモニター
WordPressのDownload Monitorでショートコードを使わずにダウンロード数をページに表示する

WordPress のプラグインに「Download Monitor(ダウンロードモニター)」というファイルのダウンロード数をカウントできるものがあります。登録したファイルがどれだけダウンロードされたのか、いつダウンロー […]

Stingerで特定記事だけAdsenseを表示しないようにする

このブログでも使っている WordPress の人気テーマ Stinger3 で Adsense を表示しないようにする方法を紹介します。Stinger5 でも同様です。 目次1 Adsenseを非表示にする必要性2 S […]

全記事一覧
WordPressで全記事一覧と投稿日を一緒に出力する方法

WordPress を使う前は Movable Type や Serene Bach を使用しておりましたが、その時は対して苦労しなかった「全記事一覧と投稿日を一緒に出力する」事が WordPress では結構実現に手間 […]

WordPress管理画面の投稿一覧で表示される投稿数を変更するには

WordPress の管理画面と言えば、WordPress でブログやサイトを運営しているなら必ず目にするものですが、投稿一覧に表示される記事の数を変更する必要がありました。普通にブログを書くだけなら、投稿一覧の記事数な […]

AMP
WordPressを簡単にAMPに対応するテーマやテンプレートを紹介

ウェブサイトの SSL 対応と同様に、いずれ AMP にも対応せざるを得なくなるんじゃないかなぁと思っています。AMP とはスマートフォンなどのモバイル端末でのウェブ閲覧を爆速化するプロジェクトです。AMP に対応したウ […]

wordpress
今何記事目?WordPressで公開記事数を表示する

WordPress で公開記事数を調べたければ管理画面(ダッシュボード)に行けばすぐにわかっちゃうのですが、サイト上に表示したいという人もいるかもしれません。 ブログならそんなに記事数をわざわざ閲覧者にアピールする必要も […]

著者について

名前:Azell
作曲したり風景写真撮ったりWeb制作したりする人です。 好きな事を楽しくブログに綴れていけたらと思います。

フォローはこちら

       

       
スマホで遊園地経営ゲーム「ローラーコースタータイクーンタッチ」レビュー

自分で夢のワンダーランドを作る遊園地経営シミュレーションゲーム

大垣で和風生パスタ!半個室で落ち着くニーニャニーニョ桜小町

岐阜県大垣市にニーニャニーニョ桜小町というパスタ店がありました

滋賀県の高校野球予選を観戦するのに入場料金はいくら?

夏、7月。全国の高校球児達が甲子園を目指して熾烈な野球の戦いが

Premiere Elementsでテキストアニメーションの効果時間(速度)を調整

Premiere Elements には誰でも簡単にテキストア

養老スマートインターチェンジへの入り方について

2018年6月24日に名神高速道路の養老スマートインターチェンジが開通

→もっと見る