*

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

おすすめトピックス

関連記事

pasokon-pc
WordPressで投稿日時の年月日を別に取得する方法

WordPress には投稿日時を取得する関数 get_the_date() という便利なものがありますが、これだと年月日全てが表示されてしまいます。投稿年月日を年・月・日と別に取得する方法はないかと結構頭を悩ませたんで […]

WordPressで突然ace_where,ace_joinに関するエラーが出てサイトが崩壊した話

先日私が管理している WordPress サイトの一つを見た時、いつもと違う印象を受けました。サイトデザインも崩れていますし、投稿内容もおかしな事になっていました。突然サイトが自分の意図しない物になっていたら焦ります。 […]

WordPressのパーマリンクに%E2%80%8B%E2%80%8が混入する原因と正体

WordPress のパーマリンクに不可解な文字列「%E2%80%8B%E2%80%8」が混入するという現象が発生しました。 パーマリンクとは上図のやつですよ。ようするに投稿記事の URL です。WordPress 管理 […]

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

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

WordPressのサイト内検索で各記事に検索キーワードを設定する【プラグインなし】

WordPress の各記事に検索キーワードを設定する事はできないだろうか?とふと思いました。通販サイトなどでは商品説明とは別に検索キーワードが個別に設定できるものです。これが WordPress でできないだろうかと。 […]

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

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

著者について

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

フォローはこちら

       

       
郵便局の郵便配達が2020年を目処に土曜配達を廃止する見込み、代替方法は?

郵便配達の土曜日配達が2020年を目処に廃止される方向へ動いて

Androidスマホやタブレットの予測変換を1つだけ削除、消す方法

Android スマートフォンやタブレットで文字入力をしている

住所録がない場合でもダイレクトメールが送れる郵便局のサービス「かもめタウン」

ネットショップの仕事をしていた頃はダイレクトメールを送る為の住

彦根市の本格スパイスカレー専門店「カレー食堂ジャンゴ」でランチ

彦根市に本格スパイスカレー専門店「カレー食堂ジャンゴ」が201

Twitter公式Web版で複数アカウントの切り替えに対応!既存アカウントの追加方法

Twitter をいつもお使いであれば、複数アカウントを運用し

→もっと見る