#0013 WordPress テキストウィジェットの中でプラグインを使わずに PHP を実行する方法

スマホ(Textのみ)⇔PC(Display)広告自動切換えテスト中(現在スマホ以外で表示中)

WordPress のウィジェットは便利ではあるのですが、使用できるのは標準の HTML のみですので、例えば、adsense でスマホのときはテキスト広告、スマホ以外のときはディスプレイ広告というように動的に変更したいというようなときにはそのまま使うことが出来ません。

ここでは exec php 等のプラグインを使わずに、ウィジェットの中で PHP を実行する方法として、ショートコードを利用する方法を紹介します。

詳細は以下のページで確認してください。
WordPress Codex ショートコード

以下の記事では、「記事タイトル下ウィジェット」にスマホ/PC 自動切換えの広告を表示する手順です。

コードを見ればわかりますが、記事のプレビュー時には広告を表示しないようにしています。

1. function.php にコードを追加する

function.php に以下のコードを追加します。
is_mobile() 関数が既にシステムに組み込まれている場合は、貼り付けるコードから除外しても OK です(既存チェックを行っているので、このままでも OK です。)

//スマートフォンを判別
if( function_exists( 'is_mobile' ) === false ):
function is_mobile(){
	$useragents = array(
		'iPhone', // iPhone
		'iPod', // iPod touch
		'Android.*Mobile', // 1.5+ Android *** Only mobile
		'Windows.*Phone', // *** Windows Phone
		'dream', // Pre 1.5 Android
		'CUPCAKE', // 1.5+ Android
		'blackberry9500', // Storm
		'blackberry9530', // Storm
		'blackberry9520', // Storm v2
		'blackberry9550', // Storm v2
		'blackberry9800', // Torch
		'webOS', // Palm Pre Experimental
		'incognito', // Other iPhone browser
		'webmate' // Other iPhone browser
	);
	$pattern = '/'.implode('|', $useragents).'/i';
	return preg_match($pattern, $_SERVER['HTTP_USER_AGENT']);
}
endif;

// https://wpdocs.osdn.jp/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89
add_filter('widget_text', 'do_shortcode');

function fnSwitchAd1() {
	if(is_preview())return ""; // プレビュー時は無視
	if( is_mobile()){ // スマホのときの出力
return <<< EOB
ここにスマホのときに表示する広告コードを書く
EOB;
	}
	else {	// スマホではないときの出力
return <<< EOB
ここにスマホではないときに表示する広告コードを書く
EOB;
	}
}
add_shortcode('switchad1', 'fnSwitchAd1');
2. function.php にコードを追加する

Wordpress ダッシュボードの『外観』 → 『ウィジェット』で「記事タイトル下ウィジェット」にテキストウィジェットをセットして、以下のように [switchad1] と入力して保存します。

最初は、ウィジェットテキストに直接 PHP コードを書いて自動切換えが出来ると良いと思っていたのですが、ショートコードを使う都合上、表示するHTMLコードにカギ括弧がある場合(つまり adsense の場合)はエスケープをしなければいけない等を考慮する必要があるため、単純に function.php に書き込むことにしました。

現在、このブログで自動切換えを行っていますので、気になる方はスマホとPCで見比べてください。(しばらくはチェック用の文字を表示しています)



wrote by tasa.