例えば出勤シフト管理ができるポータルサイトを作ろうとした場合について考えます。
条 件(以下のようなものを作ろうとした)
- 売り場の管理者は売り場内の担当の登録したものは全て見ることができるし登録・修正・削除もすることができる。
- 売り場の管理者が作成した担当名簿に関しては自動で売り場の管理者の管理下に置かれることにする。
- 売り場の管理者は他売り場の内容は見ることも登録・修正・削除することもできない。
- 担当は自分の出勤日または時間を登録・修正・削除できる。
- 担当はほかの担当の登録内容は見ることができるが登録・修正・削除はできない。
悩ましいのは2番と3番である。ワードプレスの基本機能では実現できない。ググってみても欲しい記事を見つけることができなかった。
以下は上記2と3を解決するためのものです。
ワードプレスのユーザーに階層(親子関係)を持たせる方法
最初に思いつく方法はusermetaテーブルを利用することです。一社しか利用しないサイトならこれで決まりです。が、今回は全国にあるデパートやスーパーなどを対象としたポータルサイトを作りたい。usermetaを使用するには荷が重い気がした。usermetaテーブルを使えないなら自分でテーブルを追加するしかない。ここまで決まったらあとは簡単です。以下のようなテーブルを追加します。
NO | 管理者のid | 担当のid |
---|---|---|
1 | 26 | 354 |
人によってはもっと簡単かも知れない作り方は【ワードプレスで独自のテーブルを使用する】を参考にしてください。
今回は phpMyAdmin を使わないでプラグインにします。
プラグインファイル
function arumakan_create_table()
{
global $wpdb;
$arumakan_tb_version = '1.0';
$installed_ver = get_option("arumakan_tb_version"); //現在のプラグインのバージョン
if ($installed_ver !== $arumakan_tb_version) {
$table_name = $wpdb->prefix . 'booking'; /テーブル名をbookingにしました
$charset_collate = $wpdb->get_charset_collate(); //文字コードと参照順
$sql = "CREATE TABLE $table_name (
id mediumint(8) NOT NULL AUTO_INCREMENT,
parent_id mediumint(8) NOT NULL, //親のユーザーID
child_id mediumint(8) NOT NULL, //子のユーザーID
PRIMARY KEY##(id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql); //dbDeltaは既存テーブルと比較しながら差分のテーブルを作成してくれる
update_option('arumakan_tb_version', $arumakan_tb_version);
}
}
register_activation_hook(__FILE__, 'arumakan_create_table'); //プラグインが有効かされた時だけに実行される
##のところは半角スペースを二つ挿入してください。
フィールドの記入は一行に一つだけしか記入できません。詳しくはこちら