Skip to main content

ログイン中のユーザーに特定のブロックが表示されないようにする方法

アフィリエイトネット広告というものを体験すべく、数日前から Google AdSence の広告ブロックをサイドバーに組み込んでいる。

アクセスの大半がその広告をクリックしてはならない自分自身、という現実はさておき、自分のサイト内にクリック禁止領域があるのは大きなストレスだ。うっかり一度クリックしただけで AdSense のアカウントを永久剥奪されたという噂 (本当かウソかは知りません) もあるようで、なんだかどきどきしてしまう。

そこで、標記の設定をすることにした。普段、自分のブログにはログインした状態でアクセスするので、ログイン中は広告ブロックが表示されないように設定すればいいと。

Drupal のナビゲーションメニューで [管理セクション] - [ブロック] をたどり、対象となるブロックの [設定] からブロックの設定ページを表示する。ここで "PHP モード" を選択し、アクセスしてきたユーザーがログイン中かどうかを判別するコードを書けばよい。匿名ユーザーなら TRUE、それ以外なら FALSE を返すわけですが、さて具体的にどう書く?

こんなありがちな設定は本に例が出ているかもしれない、と思い、評判の Drupal 本 ”Pro Drupal Development” を調べてみると、9 章 "Working with Blocks" でズバリな答えを発見。

グローバルな $user オブジェクトの uid プロパティが 0 なら匿名ユーザー、非ゼロならログイン中と判断できるわけですね。あとは bool でキャストすればいいのか、なるほど。
いやぁ、やっぱりこの本、すばらしいです。おかげで、地雷原を歩くような気分で自分のサイトの作業をする必要がなくなった。

で、ついでにログイン画面にも広告が出ないようにしてみた。

<?php
global $user;
if ($user->uid == 0 && arg(0) != 'user') {
  return TRUE;
} else {
  return FALSE;
}
?>

それにしても、誰も見てない広告を表示するために、なんでこんなことやってるんだか。

訂正とコメント削除

冒頭の部分を訂正しました。
AdSense は PPC 広告で、成果報酬型のアフィリエイトとは区別するんですね。
そんなことも知らないんですよ、ははは。

それと、あるブログコミュニティへのお誘いのコメントをいただきましたが、
個人的にまったく興味のない分野でしたので削除させていただきました。
ご了承ください。