WordPressで管理者など、ログインユーザーとそれ以外でIF文による条件分岐を行いたいケースがあるのではないでしょうか。
今回はスタンダードなPHPとちょい変わり種のJavaScriptの2種類で判定する方法を紹介します。
PHPで判定
ログインユーザーの判定には、PHPでWordPress関数is_user_logged_in()
を使うのが定石です。
<?php if ( is_user_logged_in() ) : ?>
<p>ログインユーザー</p>
<?php else : ?>
<p>非ログインユーザー</p>
<?php endif; ?>
では、条件分岐してみましょう。
非ログイン時だけアナリティクス計測タグを出力
<?php if ( !is_user_logged_in() ) : ?>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXX-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-XXXXXXXX-1');
</script>
<?php endif; ?>
こちらは!is_user_logged_in()
で条件分岐することでログインユーザーでない場合にアナリティクスタグを出力するというものです。
目的は解析に不要なログインユーザーのアクセスを計測しないことです。
非ログインユーザーの所定のページへのアクセスをリダイレクト
<?php if ( !is_user_logged_in() && is_single(842) ) : ?>
<script>
setTimeout("link()", 0);
function link() {
location.href = 'https://example.com/page2';
}
</script>
<?php endif; ?>
この例では、JavaScriptでpage1
(ページID=842)への非ログインユーザーのアクセスをexample.com/page2
に転送しています。
テーマのヘッダテンプレートなどに記述する形になると思いますが、頻繁に使う必要があれば、ショートコードにした方がよいでしょうね。
JavaScriptで判定
次は判定自体をJavaScriptで行ってみましょう。
<script>
if (document.getElementById('admin-bar-css')) {
document.write("ログインユーザー");
} else {
document.write("非ログインユーザー");
}
</script>
これはログイン時にはadminバーが表示されることを利用して判別しています。
当然、アクティブテーマで管理者のログイン時にはツールバーが表示されること、そして、ユーザーの個人設定で「サイトを見るときにツールバーを表示する」にチェックが入っている必要があります。
PHPの場合は基本的にテーマファイルに記述する必要があります。
JavaScriptを使うメリットはテーマファイルに記述する必要がないこと。
カスタムフィールドにスクリプトを追加できるテーマも多いですし、投稿自体に含めることもできます。
上記を記事に挿入すれば、判定結果が表示されます。
先のように転送させるのであれば、非ログインの条件分岐となるelse
部分に転送スクリプトを追加します。
<script>
if (document.getElementById('admin-bar-css')) {} else {
setTimeout("link()", 0);
function link() {
location.href = 'https://example.com/page2';
}
}
</script>