【WordPress】ログインしているユーザーには表示しない(訪問者にだけ表示する)コンテンツを作る方法 | Knowledge Base

【WordPress】ログインしているユーザーには表示しない(訪問者にだけ表示する)コンテンツを作る方法

WordPressでサイト作りをしていると、会員制サイトのようにログインユーザーに表示させるコンテンツというのを作りたい!と思う機会は多いと思います。

でも逆に訪問者にだけ表示させるコンテンツを作りたい!という場合どうしてますか??

ってあんまりない??いやいや案外あるかもしれないですよ。

よくあるのは複数の人で管理しているWordpressサイトでログインした人による無意識の広告クリックを防ぎたいとき。アフィリエイトサービスによっては同じグローバルIPから複数回クリックされるとアカウント停止なんてこともありますからゆゆしき問題ですよね?

それ以外にもログアウトしている方に「ログインしてください」などの文字列を表示させたり、「ユーザー登録すれば隠しコンテンツがあるよ!」などと案内したり、ログインフォームを表示したりなんてことにも使えると思います。これらはログインしている人には不要な表示ですからね。

ちょっと脱線して余談になりますけど、広告などで表示はされるけどログインユーザーにはクリックされないようにしたければ

で方法を紹介してますので参考に読んでみてください。

今回はログインしていない人には表示しない部分を作る方法を2つ紹介します。それぞれに一長一短ありますので使用する際の判断材料にしてくださいね。

テーマのCSSで表示/非表示を切り替える

.logged-in

テーマに直接記述する

WordPressのコーデックス

によると

<?php
if ( is_user_logged_in() ) {
	echo 'Welcome, registered user!';
} else {
	echo 'Welcome, visitor!';
}
?>

というサンプルコードが紹介されており、なるほどそうでなかったら基本通りelseを使うのねというのは分かります。

でも・・・中に書く(表示・表現する)内容はechoだけじゃないし、それ以外の方法は分からないし・・・という時のために、中のコードをある程度自由にできないか??ということでいろいろ探してみました。

すると、

さんのサイトにそれを実験させるコードが掲載されていました(備忘録として保存するためにコードを転載させていただいております)

<?php if(is_user_logged_in() == TRUE){?>
    //ここにログイン時のコンテンツを入れる
<?php }else{?>
    //ここにログインしていない時のコンテンツを入れる
<?php }?>

※これ以外にもユーザーのログイン状態によっていろいろな制御をする方法が掲載されていて本当に参考になりました

これを使うと内容にpタグなどを使って通常のhtmlのように記述して表示することができるようになります。

コード知識に乏しいだけじゃん!と言われればそれまでですが、私レベルの人にとってはとってもありがたいコードだと思います。

おまけ ユーザーの権限によって切り分ける方法(PHP)

ここまではログインしてる?してない?で切り分けていましたが、おまけとして一定権限のあるなしで切り分ける方法を紹介しておきます。このコードは

(英語のサイトです)に書かれていました。

<?php global $user_identity, $user_ID;
	if (current_user_can('read')) { ?>
	<!– 権限のある人(ログインしてる人)に表示するコンテンツ –>
<?php } else { ?>
	<!– 権限のない人(ログインしていない人)に表示されるコンテンツ –>
<?php } ?>

コード中にある「read」という権限は購読者以上の権限であれば誰でも有するので、上のコードはログインしているか?していないか?という判断になります。

もしも管理者だけ・・・ということであれば、「activate_plugins」など、管理者だけが持つ権限にすれば機能します。

権限の一覧については

を参照ください。

おまけ ちょっと覚えたこと

今回のように条件によってTrue(真)/false(偽)を判定する関数を使ってTrueの場合、Falseの場合という記述をするとき、通常のコードでは

<?php
if ( is_user_logged_in() ) {
	echo 'Welcome, registered user!';
} else {
	echo 'Welcome, visitor!';
}
?>
と記述すると冒頭で紹介しました。これを分割して書きやすく(コードを見やすくする)には
if ( is_user_logged_in() ) {
} else {
}
をそれぞれphpで囲むだけなんですね。こうするとみんな独立したphpコードになるのでその間は何でも記述できるということなんですね。

・・・という位PHP弱者な作者ひまあーとでした。

でもちょっと勉強になったので他の機会でも使ってみようと思います。

トップへ戻る