WordPressのログイン状態で条件分岐する

ヘッダ画像

WordPressのログイン状態で条件分岐する

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()で条件分岐することでログインユーザーでない場合にアナリティクスタグを出力するというものです。
目的は解析に不要なログインユーザーのアクセスを計測しないことです。

WordPressでアナリティクスから自分のアクセスを除外する!固定IPじゃなくてもOK
WordPressでアナリティクスから自分のアクセスを除外する!固定IPじゃなくてもOK

自分でサイトをチェックしたり、ひとつの記事を書きあげるために何度もプレビューする方は多いはずです。 プレビューはパラメータが付きますので除外可能なのですが、デフォルトではビューとして都度カウントされます。 正確な解析を行うためには自分のアクセスは集計から除外し […]

非ログインユーザーの所定のページへのアクセスをリダイレクト

<?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>

コメントを残す

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


The reCAPTCHA verification period has expired. Please reload the page.



関連記事