Wordpress

WordPressで該当ページを閲覧したユーザー情報をCSVで吐き出したい

私のお客様で、こういう案件がありました。

  • WordPressで会員制ページを作りたい
  • Basic認証ではなく、WordPressでユーザーを作って管理したい
  • ページを訪れたユーザーの履歴を残したい
  • 取得した履歴をCSVとして出力したい
  • 弊社としては管理者権限を渡したくない

このような案件に関して、
弊社ではUser Activity Log Pro」というプラグインを購入して
対応いたしました。


なぜこのプラグインにしたか、記載していきます。

「User Login History」を使わなかった背景

まず、無料で使える範囲でのプラグインを探しました。

最初調べていた時点では、

  • ページを訪れたかは分からないけど、とりあえずログインしたユーザーの履歴は残せる
  • 取得した履歴をCSVとして出力したい

ここまでの範囲なら、「User Login History」というプラグインで対応できます。

このプラグインのメリットとしては、
ショートコードを利用して固定ページでログイン情報を一覧表示出来る点でした。

<?php echo do_shortcode('[user_login_history]'); ?>

しかし、問題はCSV機能。

一覧はショートコードで出力が出来ますが、CSV出力ボタンは固定ページに設置出来ません。

User Role Editorを使って管理画面で「編集者権限」をカスタマイズしましたが、
いくら工夫しても管理画面にメニューが現れず…。

他に似た機能を持つプラグインを試してみても「編集者権限」のメニューに表示されなかったので、
履歴を残す系は管理者しか閲覧出来ない設定が一般的らしいです。

そこで出会ったのが「User Activity Log」を有料化するという案でした。

「User Activity Log Pro」のメリット

User Role Editorで「manage_options」にチェックを入れたら表示がされたので、
CSV出力だけ出来たら、後はメニュー非表示でなんとか対応出来るかなーと考えていました。

しかし、「User Activity Log Pro」の機能は想像以上に豊富で、とても満足しています。

デモがあるので、機能をそのまま確認できる

購入者としてとてもありがたかったのが、「公式のデモがある」ということでした。

これで、求めている機能が本当に実装されているか、確認出来るのがありがたいですね。

実際に実装されているお客様のサイトは紹介できないので…
公式デモのスクリーンショットを通して、紹介します。

CSVやJSONで出力できる

これですよ。これ。今回求めていた機能。

設定した行動履歴をCSVで出力することが出来ます。

また、CSVだけでなくJSONも出力できる仕様で、何かのシステムで使えそうな気がします。

管理画面にアクセス出来るユーザー権限の変更機能を、公式で提供されている

今回のプラグイン選定にあたり一番苦労していた機能が公式で展開されており、管理者以外でもこのプラグインを利用出来ることが分かります。

履歴に残す行動を選ぶことが出来る

今回の目的は「該当ページをどんなユーザーが見たかを確認したい」という内容でしたので、
投稿履歴等は必要ありませんでした。

このプラグインでは、表示する行動を選択して表示することが出来るので、
今回のような絞った要素で利用することも可能です。

カスタマイズして、会員制ページテンプレートの閲覧履歴を取得出来るように設定可能

さらに、カスタマイズ。

こちらのプラグインは、カスタムイベントを作ることが出来ます。

こちらにて、自分の設定したフックを利用してイベントを作ることが出来ます。

今回は特定のテンプレートを閲覧した場合に履歴を残す方法をご案内します。

1.会員制ページテンプレートに、do_action関数を記載

まず、テンプレートにdo_actions関数を記載します。

今回はmember_page_action_hookとしてフックするように設定します。

<?php
/**
 * Template Name: 会員制ページ
 */
?>
<?php if( is_user_logged_in() ) : ?>
<?php do_action( 'custom_action_hook' ); ?>
<?php get_header(); ?>
ページの内容を記載

なお、今回は会員制ページの作成のため、
ログインした場合のみページを閲覧可能にし、フックもログインした人のみ設定するようにしました。

<?php
/**
 * Template Name: 会員制ページ
 */
; ?>
<?php if( is_user_logged_in() ) : ?>
<?php do_action( 'custom_action_hook' ); ?>
<?php get_header(); ?>
ページの内容を記載
<?php get_footer(); ?>
<?php else: ?>
    <?php header("Location: ログインURlに移動させる") ?>
<?php endif; ?>

2.functions.phpにフックを定義

functions.phpに、1.で設定したフックの中身を書いていきます。

今回は関数上では何も行わないので、trueを返すのみにしておきます。

function custom_action(){
  return true;
}
add_action( 'custom_action_hook', 'custom_action' );

3.User Activity Logにて設定

custom_action_hookがフックされたら履歴が残すように、User Activity Log にて設定します。

「Event Name(Activity Name):」 に custom_action_hook名 を記載します。

「 Event Type:」はカテゴリーみたいなもので、一覧表示されたときに絞り込むことが出来ます。

また、「Event Label: (ラベル)」と「Event Desctiption:(詳細)」は何の項目か分かる程度に適当に記載しておいてください。

一定アクションがあったら、メールで教えてくれる

今回の案件では利用がありませんでしたが、
規定のアクションがあった場合、指定されたメールアドレスに送ってくれる機能もあります。

例えば、「寄稿者権限にするほどでもないけど、投稿されたときに連絡がほしい」とか、
「削除されたときはメールが飛ぶ」など、様々なシーンで利用できます。

アイコン名を入力

アップデートがされた場合は通知が行く」設定をしていれば、
お客様が勝手にWordpressをアップデートしたとしても制作会社側で確認ができるので、
保守提案の幅が広がりそうに思いました。

まとめ「考え方しだいでは、提案の幅が広がりそう」

このプラグインによりお客様の要望を想定以上に叶えることができ、お客さん側も制作側も大満足でした!

ただ、今回は該当ページのアクセスログということで、かなり狭い範囲での利用している印象でした。

このプラグインを使って、
他のお客様にもっと色々提案できたりするんじゃないのかなーと思いました。