WordPressで「管理者としてページにアクセスしているかどうかを判定する方法」を考えよう

WordPressで作ったサイトにGoogle Analyticsのコードを入れることがあるが、素のままでは編集時のプレビューや編集人自身がサイトを表示するとき、つまり自分がサイトのページを見るときもGoogle Analyticsのコードを実行してしまう。そのため、「管理者がページをアクセスしたときはGoogle Analyticsのコードを実行しない方法」を入れたい。

この方法はGoogle Analyticsのコードの実行の制御以外にも、「管理者がアクセスしているときは広告を表示しない」、逆に「管理者がアクセスしているときだけアクセス情報を表示したい」といったことにも使える


- 広告 -


管理者かどうかを判定する方法

使う関数と使い方

現在ログインしているユーザーが管理者かどうか判定するには、関数current_user_can()を使う。この関数のパラメータにmanage_optionsを指定すれば管理者としてログインしているかどうかを判定してくれる

「管理者である」を判定するときは、

if (current_user_can('manage_options')) {
    //管理者の場合の処理
}

と書く。「管理者ではない」を判定するときは、

if (!current_user_can('manage_options')) {
    //管理者以外の場合の処理
}

と書く。また、「管理者であるときと管理者ではないときで処理などを分ける」ときは、

if (current_user_can('manage_options')) {
    //管理者の場合の処理
} else {
    //管理者以外の場合の処理
}

とすればいい。

自前の関数を作ろう

管理者かどうかの判定を使うところが一か所であれば↑のコードをそのまま書けばよいが、複数の箇所に入れたいときに都度判定文を書くのはよろしくない。そこで、判定文を自前の関数にしておこう。

/* 管理者かどうかを判定する */
add_action('init','is_logged_in_by_admin');
if(!function_exists('is_logged_in_by_admin')) {
  function is_logged_in_by_admin() {
    return current_user_can('manage_options');
  }
}

↑このコードをfunction.phpの中に追記しておこう。

このように使う

Google Analyticsのコードはこのように書く。

<?php if(!is_logged_in_by_admin()) { ?>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-XXXXXXXXXX');
</script>
<?php } ?>

コメント

タイトルとURLをコピーしました