wordpressにはたくさんのプラグインがあり、会員管理に特化したもの、簡単に導入できるものなど様々存在するが、独自でログイン認証を付ける方法必要があり、色々試しながら構築してみました。





wordpressプラグインを本当は使いたくない理由

そもそも、プラグインで自分のほしい機能があればそれに越した事はない。ですが、プラグインに頼る事があまり好きではない。そもそもwordpressに頼ることも好きではない。どうしてかというと、wordpressは常にセキュリティを気にしなければならず、中小企業のWEBサイトを構築する場合は、毎月管理契約を結ばない案件も多く、制作して引き渡ししたあとに、重大なアップデートが必要な場合などはお客様がしっかりと知識があれば良いのだが、無理に費用を捻出していただき、アップデートすることが難しい事も多い。

そのため、出来る限り自分で構築し、安全なサイト運営が行えるようにしている。ですが、費用を抑えながら、どうしてもシステムが多いサイトを作りたい、自分の会社で更新できるようにしたいなどの要望がある場合は、使うしかない場合もある。最低限のプラグインを使って、安全なサイト運営をできるように提案するようにしている。

さぁ、本題に戻りまして、会員管理機能があるプラグインをご紹介します。今回はwordpressサイト全体をログインしなければ閲覧できないようにしたい!そして、IDとパスワードは同じものを共通して使いたい。定期的にこのIDとパスワードを変更したいという要望がありました。そこで、会員管理機能プラグインを調査してみました。

wordpress会員管理機能プラグインのご紹介

まずは、色々ありますが簡易的なものからご紹介します。

(1)Simple Membership(日本語対応、簡単に導入可)

https://ja.wordpress.org/plugins/simple-membership/

Simple Membershipプラグイン:公式サイト

こちらは導入が簡単であるということで人気のプラグインです。どのページに認証を付けるのかという設定がチェックボックスでつけられるので、投稿と同時に簡単に設定が可能です。

(2)WP-Members Membership Plugin(日本語対応、一番人気)

https://ja.wordpress.org/plugins/wp-members/

WP-Members Membership Plugin:公式サイト

こちらは、会員サイトを構築する際の一番一般的に利用されているプラグインです。利用者数も最多ですので、ブログなどでかなり情報量が多いです。そのため、同じような使い方をしたいという方の情報も多いので、とても参考になりますし、カスタマイズしたいとお考えの方、初心者方にもおすすめです。迷った場合はこれを使う事をおすすめします。

ログインフォームの作成などは、一行の簡単なコードを既存ページに入れるだけなので、とても手軽です。会員登録時の入力項目も自分で設定できますし、パスワードリマインダーや、会員情報変更ページなども元々の機能として存在します。一般的な会員サイトの場合はこれで十分です。

(3)Ultimate Member(ほぼ日本語対応、自由度高い)

こちらは全てではありませんが、ほとんど日本語対応していますので英語が分からない人も安心して使えます。WP-Members Membership Pluginよりもフォームのカスタマイズの自由度が高いです。WP-Members Membership Pluginとほとんど同じくらいの人気をほこります。

カスタマイズの自由度というのは、フォームを実際の目で見てドラッグしながら順番を入れ替えたりできます。フォームの設定は複雑になりがちですが、こちらは迷いなく作成できます。

このように、プラグインはたくさん用意されていますので、ご自分がこれを実現したい!という内容が決まっている場合はその機能がついているかどうか、どれを選んでよいか分からないという方は、一番情報量が多く人気のある「WP-Members Membership Plugin」が良いと思います。

上記のようにログイン認証つきの会員登録機能はプラグインとしてたくさんありますが、今回実現したい仕様はとてもシンプルでユーザーは2種類しかおらず、すべての権限を持つ管理者と、一般の会員のみです。この一般の会員は全員同じIDとパスワードを使ってログインするため、複雑な会員機能はいらないです。

そして、wordpressのプラグインに頼らない事でサイトのリニューアルや別途システムとの相性も考える必要もなく、安心して運用できるのが一番の強みです。常にセキュリティの心配をするのはシステムを提供する側にとっても不安の種です。

そのため、サイト全体を独自のオリジナルPHPを書いて、独自の認証システムを作ります。





仕様

今回オリジナルで作る認証システムの仕様です。

  • 1つのIDとパスワードでのみログインできる。
  • 900秒(15分)操作しない場合は自動でログアウトするようにする。
  • ログイン、ログアウトなどはGETで処理しlogin.phpファイルのみで運用

サイト構造

構造はとてもシンプルです。新しく作成するlogin.phpとconfig.php、wordpressのテーマで使っているheader.phpにphpプログラムを追記するだけです。3つのファイルしかさわりません。siteは任意に付けたものですので、ご自身の環境に合わせてください。大切なことは、wordpressをインストールしているフォルダと同じ階層にphpファイルを置く事です。

・site/wordpress/wp-contant/themes/使っているテーマ名/header.php
・site/login.php(ログイン、ログアウト処理)
・site/config.php(IDとパスワードを記述)

それでは、まずはheader.phpに追記する内容です。

session_start();

//絶対パスで設定ファイルを読み込む
include_once("○○○/○○○/config.php");

//ログイン済みかを確認
if (!isset($_SESSION["USER"])) {
    //ログインしていないのでログインページへ
	header('Location: https://○○○.com/login.php');
    exit;
}
else{
	//ログインしている
	//900秒(15×60)操作がなかったら自動ログアウト(秒数を入力する)
	if(time() - $_SESSION['TIMESTAMP'] > 900)
	{
		header('Location: https://○○○.com/login.php?mode=logout&flg=autologout');
		exit;
	}
}

○○○.comは自分のサイトのURLを入れて下さい。追記するときの注意点は必ず、<?phpの一番上に書く事です。sessionはプログラムの一番上に書く事が前提です。もし、echoなどで何か出力してしまったらエラーが発生します。あとは、900秒のところを自分が設定したい秒数に書き換えればOKです。

さ、次はlogin.phpです。

session_start();

//絶対パスで設定ファイルを読み込む
include_once("config.php");

//ログアウト機能
if($_GET['mode'] == 'logout'){
    $_SESSION = [];
    session_destroy();
	if(!isset($_GET['flg'])){
		$flg_message = "ログアウトしました";
	}
}

//自動ログアウト判定(15分)
else if($_GET['flg'] == 'autologout'){
	$flg_message = "一定期間操作がなかったため自動ログアウトしました";
}

//==============================
//ログインしていたら会員ページへ
//==============================
if (isset($_SESSION['USER'])) {
	header('Location: https://○○○.com/wordpress/');
	exit;
}

//===============
//ログイン処理
//===============
if(isset($_POST['login'])){
	$flg_message = "";
	if ($_POST['id'] == $config_user_id && $_POST['password'] == $config_user_pw){
		$_SESSION["USER"] = $config_user_id;
		$_SESSION["TIMESTAMP"] = time(); //ログイン時の時間を記録
		header('Location: ○○○.com/wordpress/');
		exit;
	}
	else{
		$flg_message = 'IDもしくはパスワードが間違っています。';
	}
	
}

このファイルだけでログイン、ログアウト、自動15分ログアウトを処理します。でも、かなりシンプルです。

最後に、認証に必要なIDとパスワードを設定ファイルconfig.phpに記述します。

//参加者用認証アカウント
$config_user_id="iddesu";
$config_user_pw="passdesu";

このように設定ファイルだけを別ファイルにすることでシステムに詳しくない方でも簡単に書き換えが可能になりますし、あとから自分で変更する時も楽です。もし、お客様自身で書き換えたい場合はcsvやtxtファイルなどにして、書きかえできるプログラムを追加すれば良いです。

ログアウトに関しては、wordpressのメニューを「ログアウト」としてつくり、以下にリンクを貼ればOKです。GETでlogoutして!という命令を渡しています。

https://○○○.com/login.php?mode=logout




ここで少し気になった方がいると思いますが、結局wordpressをインストールしたフォルダよりも上の階層にオリジナル認証システムを付けた形になります。じゃあ、wordpressの管理ページは普通通り使えるの?と思いますよね?

さすが、wordpress普通に管理ページから操作ができます。オリジナルのPHPプログラムがあっても関係なく運用できますよ。ぜひ簡単な認証システムを作りたい方はお試しくださいませ。