WordPressで管理画面にログインしているユーザーのアクセス解析を省く


WordPressでWebサイト(ホームページ)やブログを構築していると、ニュース記事やブログ記事などの投稿を入力してプレビューや別のブラウザなどでWebページの確認した際に、投稿者自身のアクセスが反映されるのでGoogle Analyticsのアクセス解析に影響するかと思います。

たまにアクセス解析についてご相談を受けることがあるのですが、ページのアクセス状況が不安定で正確でないために改善策を考えるのに支障が出るので大変です。
ですのでWeb集客の改善を考えている企業は正確なアクセス解析をしていかなくてはいけません。

WordPressサイトの管理画面にログインしている管理者や編集者、投稿者等のアクセス解析のコントロールをするとなると、Google Analytics側からアクセスしている場所のIPアドレスを省くといった設定を考えるかと思います。
もちろんそれでも良いのですが、会社や自宅などがグローバルIPだとルータの再起動やプロバイダ側のメンテナンス等でIPアドレスが変わることがあるので、そのたびに設定を変更するといった作業が発生します。

またメディアを運営している場合ですと、外注でライターさんがあちこちに居る場合にその方たちの作業場所のIPアドレスも1つ1つ省くように設定しなくてはいけません。

正確なアクセス解析をする場合はものすごく作業が多くて非効率です。

そこで今回はわかりやすく、WordPressで管理画面にログインしているユーザーのアクセス解析を省く方法をご紹介します。

ログインしているユーザーのアクセスを省く


WordPressで管理画面にログインしているユーザーのアクセスを省くには、WordPressに用意されているis_user_logged_in()関数を使います。

is_user_logged_in()関数は、ユーザーがログイン中かどうかを判定する関数です。
管理画面にログイン中であればtrueを返し、ログインしていなければfalseを返します。

これを使って頭に「!」(エクスクラメーションマーク)を付けることで否定の意味になりますので、
「!is_user_logged_in()」とすることで、「ログイン中でなければ」ということになります。

 
簡単に書きますとこんな感じ。

<?php if ( !is_user_logged_in() ): ?>
//Googleアナリティクスのトラッキングコード
<?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-x"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments)};
  gtag('js', new Date());
 
  gtag('config', 'UA-xxxxxxxx-x');
</script>
<!-- /Google Analytics -->
<?php endif; ?>



もしくは、別ファイル(analyticstracking.php)にしている場合は

<?php if ( !is_user_logged_in() ): ?>
<?php include_once("analyticstracking.php") ?>
<?php endif; ?>



このような感じで簡単にWordPressの管理画面にログインしているユーザーのアクセスを省くことができます。

会員制サイトの場合


会員制サイトを運用している場合は、管理画面のユーザー一覧にて、登録された会員の情報が確認できます。
WordPressのユーザー権限としては、主に「購読者」としての権限が与えられます。
この時、会員ユーザーがログインすると、サイト運営者のアカウントと同じログイン状態となりますので、会員ユーザーのアクセス解析ができなくなります。

管理者や編集者がログインしている場合はトラッキングコードを反映させず、他の「投稿者」「寄稿者」「購読者」や一般ユーザーはトラッキングコードを反映させるよう、current_user_can()関数を使いながら切り分けると良いでしょう。

current_user_can()関数の引数には、権限グループのスラッグを使います。

(権限グループ : スラッグ)

管理者:administrator
編集者:editor
投稿者:author
寄稿者:contributor
購読者:subscriber


以下、条件分岐のプログラムになります。

<?php if ( current_user_can('administrator') || current_user_can('editor') ): ?>
  <?php if ( is_user_logged_in() ): ?>
  <!-- 管理者・編集者は、Googleアナリティクスでのアクセス解析は無効です -->
  <?php endif; ?>
<?php else: ?>
<?php include_once("analyticstracking.php") ?>
<?php endif; ?>



上記のコードは、管理者と編集者のログイン時以外でトラッキングコードが反映され、アクセス解析することができます。
必要であれば、「投稿者」「寄稿者」も追加して対応してください。
1行の条件だと大変ですので、if文の入れ子で対応しています。
管理者と編集者には、コメントアウトでWebページ上で表示しないよう、ソースコード上で確認できる程度の内容を入れております。

これでより正確なアクセス解析をすることができます。

余談

会員サイトも含め、いろんな用途でWordPressが利用されるわけですが、アカウントが作成された時点でログイン状態ですと、通常のWebページの上部にツールバー(管理バー)が表示されます。
管理者が毎回、管理画面で各ユーザーのツールバーの表示設定を変更するのは大変ですので、ユーザー権限でツールバーを非表示にしておくと良いでしょう。

こちらはfunction.phpで制御していきます。
current_user_can()関数を使って権限を条件とし、show_admin_bar()関数でツールバーの非表示(false)とする関数を作成してアクションフックさせます。

function.php

// 管理者・編集者以外のツールバーを非表示にする
add_action( 'after_setup_theme', 'subscriber_hide_admin_bar' );
function subscriber_hide_admin_bar() {
  if ( !current_user_can('administrator') || !current_user_can('editor') ) {
    show_admin_bar( false );
  }
}



ツールバーを非表示でも必要であれば、「投稿者」「寄稿者」も追加してください。

現場からは以上です。