PHP の関数を作って AdSense の表示をコントロールしてみた

Twenty Fourteen  のコンテンツサイドバーに Google AdSense  を表示した。でもモバイルでは表示したくない・・・うーむ、どうしよう。

 

私は  Google AdSense(AdSense)の表示場所と表示数について、モバイルデバイスのことを考えたことがなかった。
しかし、最近  Google の「モバイル フレンドリーテスト」を受けたのをきっかけに、ここ数日間、私にしてはかなり真剣に考えなおしてみた――つまり、今のままじゃモバイルだとまずいんじゃないか、というようなことをだ。その時の私の気持ちはサブタイトルに書いたとおりだ。

という訳で、今回は広告ユニットの表示場所と表示数をコントロールする方法を考えてみた。

スポンサーリンク

広告ユニットの表示箇所:

  • 今回は、いま使用中のテーマ  Twenty Fourteen  についてだけ考える。
  • 広告ユニットの表示数はデスクトップ(PC)では 3 個、タブレットでは 2 個、スマホなどのモバイル・ホーン(モバイル)では 1 個にする。振り分けは下の表のとおり。
UA \ DISPLAY ウィジェット ページ末尾(左) ページ末尾(右)
PC
タブレット ○*
モバイル ○*

※UA  はユーザーエージェント。「*(アスタリスク)」付きはレスポンシブサイズの広告ユニット。

広告ユニットの表示方法:

  • 広告ユニットは  php  の関数などを使って表示する。表示・非表示の制御はユーザーエージェントのモバイル判定で行う。

勘違いと失敗と迷走の途中経過は省略する(注1)。
下の 2 個のコードウインドウに書いてあるのが、今回作成した  php  のコードだ。
何をやっているのかということは、コード中のコメントを読めば分かって頂けると思う。モバイル判定には、判定用データの充実したサードパーティーのライブラリ「Mobile Detect」を使っている。

C  言語系統でのプログラミング経験は長いが、php  は初めてなのでちょっと勝手がちがった。なので今回は参考サイトのコード例から色々頂いて、とりあえず定番的な、安全重視なコードになっている。

コードの追加箇所:

  • functions.php  には最初のコードウインドウに記載されたコードを追加する。
  • content.php  と  content-page.php  には 2 番目のコードウインドウに記載されたコードをそれぞれ追加する。

※各ファイルは  \wp-content\themes\twentyfourteen  ディレクトリにある。
コードを変更する前には必ずファイルのバックアップをとる。

Mobile Detect  のダウンロードとサーバーへのアップロード:

  • 1) ダウンロード先: mobiledetect  へ行き  Mobile-Detect-2.8.17.zip(2015/12/23 現在)をダウンロードする。
  • 2) …\wp_content\themes\twentyfourteen  の中にフォルダを作成する。名前は任意で良いが、私は  [ lib ]  という名前を付けてある。
  • 3) 圧縮ファイルをローカルの適当なディレクトリで解凍し、…\Mobile-Detect-2.8.17 フォルダの中の  Mobile_Detect.php  を作成したフォルダにアップロードする。他のファイルやフォルダは気にしなくて良い。

※もしフォルダ名を  [lib]  以外の名前にしたら、最初のコードウインドウの「require get_template_directory() . ‘/lib/Mobile_Detect.php’;」の  lib  のところをその名前に変える。

functions.php  の末尾に追加したコード:

このコードを配置すると、コンテンツサイドバーのウィジェット テキストにショートコードを書いて実行させることができる。ショートコードは  [[writeadcode]]  だ。

//	\wp_content\themes\twentyfourteen\functions.php の末尾に以下のコード
//	を追加する。
/* 	***************************************************** 	*/
// 		モバイル・デバイス判定に Mobile Detect Library
//		を使用する。
/* 	*****************************************************	*/
// クラスの登録とインスタンスの取得。
if (!class_exists('Mobile_Detect')){
	// 文字列を連結して絶対パスを取得する。「.(ピリオド))」に気を付ける。
	require get_template_directory() . '/lib/Mobile_Detect.php';
}
$mobile_Detect = new Mobile_Detect;

/* 	***************************************************** 	*/
//		AdSence コード出力用のショートコードを作成する 	
/* 	*****************************************************	*/
// ショートコード化対象の関数。
// twentyfourteen  のウィジェット テキストに AdSense のコードを書き込む。
function write_adcode_anywhere() {

	global $mobile_Detect;
	$strAdCode;
	
	if(!$mobile_Detect->isMobile() || $mobile_Detect->isTablet()):
		$strAdCode='ここに AdSense のコードを貼りつける。';
	else:
			$strAdCode='';
	endif;
  return $strAdCode;
}

/* ************************************************ */
// 		モバイル判定ユーザー定義関数				
/* ************************************************ */

// スマホなどのモバイル・ホーン
function is_mobile(){
	global $mobile_Detect;

	if($mobile_Detect->isMobile()):
		return true;	
	endif;
	return false;
}
// タブレット
function is_tablet(){
	global $mobile_Detect;

	if($mobile_Detect->isTablet()):
		return true;	
	endif;
	return false;
}
// PC(デスクトップ)
function is_desktop(){
	global $mobile_Detect;

	if(!$mobile_Detect->isMobile() && !$mobile_Detect->isTablet()):
		return true;	
	endif;
	return false;
}


/* ************************************************ */
//		ショートコードを登録する。					
/* ************************************************ */
// 	ショートコードタグ:writeadcode
// 	関数名:write_adcode_anywhere
// 	関数名のことを Codex のマニュアルでは「ショートコードが見つかったとき
//	に実行されるフック」と言っている。
add_shortcode('writeadcode', 'write_adcode_anywhere');

// 	ウィジェットでショートコードが実行されるようにする。
// 	参考にした幾つかのサイトは 2 行目だけを書いているので、それでもいいと
//	思う。
add_filter( 'widget_text', 'shortcode_unautop');
add_filter( 'widget_text', 'do_shortcode');

// 	また、幾つかのサイトの例の様に add_filter( 'widget_text', 
//							'write_adcode_anywhere') と書いてはいけない。
// 	2 番目の引数にショートコード化対象の関数を指定すると、追加したすべての 
//	[widget_text] でその関数が自動実行される。

content.php などに追加したコード:

content.php  は 70 行目から、content-page.php  では 30 行目から追加する。
どちらも追加箇所は <!– .entry-content –> のすぐ後ろだ。行番号は、Twenty Fourteen  のバージョンが違うと例とは違っている可能性がある。

サンプルコードの本体は  content.php  の分はコードウインドウの 12 行目~32行 目まで。content-page.php の分は同じく 45 行目~63 行目までとなっている。

<!--  content.php に追加したコード  -->

<div class="entry-content">
	
	<!--	省略	      -->


</div><!-- .entry-content -->

    <!--	Edited by Bonkure.	(2015/05/01) -->
	<!--  	is_desktop() はユーザー定義関数。定義は Twenty Fourteen の function.php にある。-->
	<div style="padding-left:4%">	
		<?php if(is_single()):?>		
		    <?php if(is_desktop()):?>			
				<div style="float:left; margin: 5px 2px; width:301px; height: 251px;">
					<center>広告</center>
					<!-- ここに PC 用の AdSense コードを貼り付ける。 -->		
				</div>
			<?php else:?>
				<div>
					<center>広告</center>
					<!-- ここにレスポンシブな AdSense コードを貼り付ける。 -->
				</div>
			<?php endif;?>	
			<?php if(is_desktop()):?>
				<div style="float:left; margin: 5px 2px; width:301px; height: 251px;">
					<!-- 2 番目の広告ユニット:これが表示されるのは PC だけ。-->
					<!-- ここに PC 用の AdSense コードを貼り付ける。 -->
				</div>
			<?php endif;?>			
		<?php endif;?>
	</div>


<!--  content-page.php に追加したコード  -->

<div class="entry-content">
	
	<!--	省略	      -->


</div><!-- .entry-content -->

	<!--	Edited by Bonkure.	(2015/05/01) -->
	<div style="padding-left:4%">
		<?php if(is_desktop()):?>			
			<div style="float:left; margin: 5px 2px; width:301px; height: 251px;">
				<center>広告</center>
				<!-- ここに PC 用の AdSense コードを貼り付ける。 -->		
			</div>
		<?php else:?>
			<div>
				<center>広告</center>
				<!-- ここにレスポンシブな AdSense コードを貼り付ける。 -->
			</div>
		<?php endif;?>	
		<?php if(is_desktop()):?>
			<div style="float:left; margin: 5px 2px; width:301px; height: 251px;">
				<!-- 2 番目の広告ユニット:これが表示されるのは PC だけ。-->
				<!-- ここに PC 用の AdSense コードを貼り付ける。 -->
			</div>
		<?php endif;?>		
	</div>

ではいつものとおり、色々参考にさせて頂いたリンクを挙げておく。
実は、他にも大変参考になったサイトがあったのだが、リンクをブックマークし忘れたためリストに入れることができなかった。何とか探し当てて追加したいと思っている。

ショートコード API のリファレンスとプラグイン/API フィルターフック一覧:

WordPress Codex  日本語版:ショートコード  API
WordPress Codex  日本語版:プラグイン/API  フィルター一覧

参考サイト:

Cyncer:php  で  PC  とスマホを判別する方法  [Mobile Detect]
Young Flavor:WordPress  でスマホとそれ以外を切り替える方法
Stephanie Leary:using shortcodes everywhere
WordPress  フォーラム:プラグインのショートコードをサイドバーで表示させたい。

注1:(戻る
一番の勘違いは、AdSense のコードが書き込まれたブロックを CSS(Cascading Style Sheets)などで非表示に設定すれば大丈夫だろう、という考えだ。
確かにブロックはディスプレイ上で非表示になるが、コードは残ったままになる。つまり「見えないけどサービスとしては働いている」という、広告スポンサーや サービス提供者に対してまことに失礼な状況になるのだ。
表示・非表示のコントロールは「表示/非表示 = コードあり/コードなし」でなければいけない。

 

スポンサーリンク

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です