WordPressのプラグインを作ろう

自分と誰かのためのメモシリーズーその1

  • ホーム
  • サンプルページ
  • ユーザー登録フォーム
  • 決済用サンプ~商品ページ
  • メニュー

  • サイドバー

  • 前へ

  • 次へ

  • 検索

  •   RSS 
  •   Feedly 
  1. ホーム>
  2. 独自ログイン・ユーザー管理プラグイン

独自ログイン・ユーザー管理プラグイン~(1)データベースにユーザーテーブルを追加

2020年1月9日2020年1月15日

  •  Twitter
  •  Facebook
  •  Pin it
  •  LinkedIn
  •  Pocket
  •  Copy

これから、独自ログイン・ユーザー管理用のプラグインを作成していきたいと思います。独自ログイン・ユーザー管理というのは考えてみるとかなり幅が広い機能ですが、コツコツとやっていきましょう。

WordPressにおけるテーブルの新規追加・更新の方法

WordPressプラグインでこのテーブルを作るにはWordPress流のやり方があります。

プラグインでデータベーステーブルを作る – WordPress Codex 日本語版

WordPress では、直接SQLを操作するのではなく、wp-admin/includes/upgrade.php にある dbDelta 関数を使うようにします。(使う直前に、wp-admin/includes/upgrade.phpファイルをincludeすること!)

dbDelta関数は指定のフォーマットでテーブルに関する情報を書くことで、現在のテーブル構造を走査し、作成予定のテーブル構造と比較します。そして、必要に応じてテーブルを追加・変更してくれるので、更新にはとても便利な関数です。

つまり、テーブルの構造をちょっとだけ変えようとするときに、ALTER TABLEなどのSQL文をいちいち書かなくて良いという事です。

ただしそのためには、以下のようなフォーマットでdbDelta関数に引数を渡す必要があります。

  • 1 行につき、ひとつのフィールドを定義してください。〔訳注:ひとつの行に複数のフィールド定義を書くことはできません。さもなくば ALTER TABLE が正しく実行されず、プラグインのバージョンアップに失敗します。〕
  • PRIMARY KEY というキーワードと、主キーの定義の間には、二つのスペースが必要です。
  • INDEX という同義語ではなく、KEY というキーワードを使う必要があります。さらに最低ひとつの KEY を含めなければなりません。
  • フィールド名のまわりにアポストロフィ(')やバッククォート(`)を使ってはいけません。
  • フィールドタイプはすべて小文字であること。
  • SQL キーワード、例えば CREATE TABLE や UPDATE は、大文字であること。
  • 長さパラメータを受け付けるすべてのフィールドに長さを指定すること。例えば int(11) のように。

それではこれを使って、独自ユーザーテーブルwpmop_usersテーブルを作成する関数をかいてみます。

function table_create(){
    global $wpdb;
   
    $table_name = $wpdb->prefix . 'wpmop_users';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id bigint(20) NOT NULL AUTO_INCREMENT,
        user_login varchar(60) NOT NULL,
        user_pass varchar(255) NOT NULL,
        user_nicename varchar(50) NOT NULL,
        user_email varchar(100) NOT NULL,
        user_registrated datetime DERAULT '0000-00-00 00:00:00' NOT NULL,
        user_activation_key varchar(255) NOT NULL,
        user_status int(11) DEFAULT '0' NOT NULL,
        display_name varchar(250) NOT NULL,
        UNIQUE KEY id (id)
        ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

プラグインをアップデートする際に、このテーブルを変更する場合には、この関数の$sqlを書き換えて実行させれば、WordPressが自動的に既存のテーブルとの比較の上、テーブルを更新してくれます。もちろんデータもそのままです。

例:user_urlという項目を追加する。

function table_create(){
    global $wpdb;
   
    $table_name = $wpdb->prefix . 'wpmop_users';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id bigint(20) NOT NULL AUTO_INCREMENT,
        user_login varchar(60) NOT NULL,
        user_pass varchar(255) NOT NULL,
        user_nicename varchar(50) NOT NULL,
        user_email varchar(100) NOT NULL,
        user_url varchar(100) NOT NULL, //新しく追加する項目を加える。
        user_registrated datetime DERAULT '0000-00-00 00:00:00' NOT NULL,
        user_activation_key varchar(255) NOT NULL,
        user_status int(11) DEFAULT '0' NOT NULL,
        display_name varchar(250) NOT NULL,
        UNIQUE KEY id (id)
        ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

プラグインインストール・アップデート時におけるテーブルの追加・更新の方法

次に、上記table_create関数をプラグインインストール・アップデート時に実行させる方法について見て見ます。

考え方としては、

プラグイン本体が書き込まれているWPMOPクラスをインスタンス化させるとき(WPMOPクラスのコンストラクタ)に、定義しておいたデータベースのバージョン、プラグインのバージョンを調べて、更新されていたらtable_create関数を実行させる

事も出来ますが、WordPressでは、

・プラグイン有効化するときのフック用関数:register_activation_hook(“プラグインファイル名", “コールバック関数名");
・停止するときのフック用関数:register_deactivation_hook(“プラグインファイル名", “コールバック関数名");

という専用フックがあるのでそれを利用し、コールバック関数内でプラグインやデータベースのバージョンの比較などを行いたいと思います。

第一引数の「プラグインファイル名」とは、今作成中のプラグインでは「my-original-plugin.php」のことです。my-original-plugin.php以外のファイルで使用する場合には、プラグインファイル名を入れてください。

以上の内容を基に、実際にmy-original-plugin.phpファイルに追記していきましょう。

ファイル構造

  • wp-content(dir)
    • plugins(dir)
      • my-original-plugin(dir)
        • my-original-plugin.php・・・プラグインやデータベースのバージョンを定義し、これまでのバージョンと比較して更新があった場合に、テーブルなどを更新する
        • script(dir)
          • form-ajax.js
        • class(dir)
          • class.wpmop.php
          • class.wpmop-script.php
          • class.wpmop-payment.php
          • payment(dir)
            • class.wpmop-payment-sbps.php

my-original-plugin.phpファイル

ここでは、テーブルのバージョンやテーブル名の定義、プラグインのアクティベーションやアップデートの際に行う関数の定義などを追記します。

ここで、先ほど、プラグイン有効化するときのフック用関数:register_activation_hookの話をしましたがこの関数は、プラグインの「アップデート」時には実行されません。よって、別途’plugins_loadedアクションを利用して、アップデート時にも対応するように設定します。

<?php 
/* 
Plugin Name: My Original Plugin Plugin 
URI: Description: This Plugin id developed for My Original Plugin 
Version: 0.0.1 
Author: webmaster@GRITT.JP 
Text Domain: mop 
*/ 

//↓↓↓↓↓新規追加ここから
//$wpdb->prefixを使用するので。
global $wpdb;
//timezoneの設定を Asia/Tokyoに強制的に変更
date_default_timezone_set('Asia/Tokyo');
//↑↑↑↑↑新規追加ここまで
//以下、プラグイン内でよく使うと思われる定数の定義 
define( 'WPMOP_VER', '0.0.1' ); 
//↓↓↓↓↓新規追加ここから
//データベースバージョンの定義
define('WPMOP_DB_VER', '0.0.1');
//独自テーブル名を定義
define('WPMOP_USERTABLE', $wpdb->prefix . 'wpmop_usertable');
//↑↑↑↑↑新規追加ここまで
define( 'WPMOP_URL', plugins_url( '', __FILE__ ) ); 
define( 'WPMOP_DIR', plugin_dir_path( __FILE__ ) ); 
define( 'WPMOP_CLASS_PATH', rtrim( plugin_dir_path( __FILE__ ), '/' ) . '/class/' ); 

define( 'WPMOP_NONCE_NAME', 'wpmop_nonce_name' );
define( 'WPMOP_NONCE_ACTION', 'wpmop_nonce_action' . WPMOP_VER );

//以下、使用するファイルの読み込み。 
include_once( WPMOP_CLASS_PATH . 'class.wpmop.php' ); 

//↓↓↓↓↓新規追加ここから
//プラグインをアクティベーションした際に行われるhook
register_activation_hook(__FILE__, 'plugin_activation');
//プラグインのアップデートの際にもデータベースチェック
add_action('plugins_loaded', 'plugin_activation');

//プラグインを有効化した際にこの関数を実行
function plugin_activation(){
    global $wpdb;

    $plugin_version = get_option('plugin_version');
    //プラグインバージョンを比較
    if (version_compare($plugin_version, WPMOP_VER) < 0) {
        //プラグインバージョンが上がった際の対応
        update_option('plugin_version', WPMOP_VER);
    }

    $plugin_db_version = get_option('plugin_db_version');
    //データベースバージョンを比較
    if (version_compare($plugin_db_version, WPMOP_DB_VER) < 0) {
        //データベースバージョンが上がった際の対応
        $table_name = WPMOP_USERTABLE;
        $charset_collate = $wpdb->get_charset_collate();

        $sql = "CREATE TABLE $table_name (
            id bigint(20) NOT NULL AUTO_INCREMENT,
            user_login varchar(60) NOT NULL,
            user_pass varchar(255) NOT NULL,
            user_nicename varchar(50) NOT NULL,
            user_email varchar(100) NOT NULL,
            user_registrated datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
            user_activation_key varchar(255) NOT NULL,
            user_status int(11) DEFAULT '0' NOT NULL,
            display_name varchar(250) NOT NULL,
            UNIQUE KEY id (id)
            ) $charset_collate;";

        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);

        update_option('plugin_db_version', WPMOP_DB_VER);
    }
   
}
//↑↑↑↑↑新規追加ここまで

//以下、クラスのインスタンス化 
global $wpmop; 
$wpmop = new WPMOP();

それでは実際に、WordPress管理画面>プラグインの画面から、My Original Pluginを無効化>有効化してみてください。

データベース内に新規テーブルhogehoge_wpmop_usertableが作られているのが分かるかと思います。

独自ログイン・ユーザー管理プラグイン

Posted by webmaster


よろしければシェアお願いします

  •  Twitter
  •  Facebook
  •  Pin it
  •  LinkedIn
  •  Pocket
  •  Copy
独自ログイン・ユーザー管理プラグイン~(2)管理画面に独自ユーザーデータを表示
Next
決済用プラグインの制作~(5)本番運用に向けて
Prev

関連記事

No Image

独自ログイン・ユーザー管理プラグイン~(3)フロントエンドにユーザー登録フォームを追加~その1~ショートコード編

フロントエンドにユーザー登録フォームを設置してそこからユーザー登録をしてもらうの ...

No Image

独自ログイン・ユーザー管理プラグイン~(2)管理画面に独自ユーザーデータを表示

これから作業を色々進めるうえで、管理画面に独自に追加したテーブル内容を見る事がで ...

ディスカッション

コメント一覧

まだ、コメントがありません

コメントをどうぞ コメントをキャンセル

メールアドレスが公開されることはありません。* が付いている欄は必須項目です

この記事のトラックバックURL

新着記事

No Image

【WordPressの動き方シリーズ】(5)メインクエリがテンプレートでどのように働いているか

【WordPressの動き方シリーズ】(4)メインクエリができるまで | Wor ...

No Image

【WordPressの動き方シリーズ】(4)メインクエリができるまで

ここからは一歩進んで、メインクエリが出来上がるまでの流れを見ていきたいと思います ...

No Image

【WordPressの動き方シリーズ】(3)オブジェクト・クラス・インスタンス

メインクエリ・サブクエリの詳細を始める前に、オブジェクト・クラス・インスタンスに ...

No Image

【WordPressの動き方シリーズ】(2)メインクエリとサブクエリの概要

メインクエリの概要 【WordPressの動き方シリーズ】(1)WordPres ...

No Image

【WordPressの動き方シリーズ】(1)WordPressで作ったサイトへのアクセスから出力までの概要

WordPressが各ページのデータを出力するまでの流れは大まかにこのような順番 ...

カテゴリー

  • WordPressの動き方
  • 基本
  • 決済用プラグイン
  • 独自ログイン・ユーザー管理プラグイン
  • 雑談

目次

  • 1. WordPressにおけるテーブルの新規追加・更新の方法
  • 2. プラグインインストール・アップデート時におけるテーブルの追加・更新の方法
  • 3. ファイル構造
    • 3.1. my-original-plugin.phpファイル

Copyright © 2023 WordPressのプラグインを作ろう All Rights Reserved.

WordPress Luxeritas Theme is provided by "Thought is free".

PAGE TOP