WordPress(以下WP)はメジャーなCMSであり、様々なプラグインがあるのでそれを利用していろんなサイトを作ることができます。
ただ、どうしても既存のプラグインでは対応できない事もあり、そういう場合は独自でプラグインを作ってしまった方がよかったりしますね。
具体的にはフルスクラッチのCMSをWPに移植する場合などです。
今回は独自プラグインをどうやって作るのかをさわりの部分だけ説明します。
プラグインの機能
今回は以下の機能のプラグインを作ります。- 管理画面にメニューを追加し、そこで挨拶文を入力できる
- 挨拶文はテーブルを新規で作成する
- テーマからは挨拶文表示関数を呼び出すと表示される
ファイル構成
フォルダ名とファイル名を共通にします。
またdefine.phpは定数とか設定するときはこっちにしておくと管理が楽です。
プラグインの情報を設定する
8bit-blog-plugin.phpの最初にコメントで下記のように記述します。
1 2 3 4 5 6 7 8 |
<?php /* Plugin Name: 8bit Plugin001 Description: プラグインの詳細が表示されます。<strong>太字</strong>を入れることが可能ですよ Version: 1.0.00 Author: 株式会社8bit Author URI: https://8bit.co.jp */ |
Plugin Name | プラグイン名です。英数字と空白のみ使用可能です。 |
Description | プラグインの説明文です |
Version | プラグインのバージョンです |
Auther | プラグインの作者名です。ここは会社名や個人名を入れましょう |
Author URI | 名前にURLを設定することができます |
その他ライセンスを記述する必要がありますが、今回は自作プラグインかつ公開しないので、ライセンスは省きます。
(公開するならLICENSEを「GPL」に設定するのがいいと思いますが)
ちなみに上記の設定をした状態でWPの/plugin/フォルダにアップしてWP管理画面のプラグインを見ると
こんな感じで表示されます。
インストール時の初期設定を行う
このまま有効化を行っても意味がないので、初期設定および処理を入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
include_once( 'define.php' ); class BlogPlugin { function __construct(){ global $wpdb; $this->wpdb = $wpdb; $this->db_version_key = "8bit_plugin_db_version"; $this->db_version = "1.0"; // テーブル名 $this->table_name = $this->wpdb->prefix . '8b_plugin_tbl'; // メニュー名 $this->page_title = "プラグインテスト"; $this->menu_title = "プラグインテスト"; $this->menu_capability = 2; $this->menu_page_id = 40; $this->menu_page_name = "8bit_plugin_top"; $this->menu_icon = 'dashicons-admin-home'; // サブメニュー $this->sub_menu1_title = "登録"; $this->sub_menu1_capability = 3; $this->sub_menu1_page_name = "8bit_plugin_edit"; $this->sub_menu1_page_id = 40; // 有効化したときの処理データベースの作成 add_action( 'admin_init', array( $this, 'create_tables' ) ); add_action( 'admin_menu', array( $this, 'add_pages' ) ); } } $BlogPlugin = new BlogPlugin; |
__construct関数の中に設定する値を入れてます。
1 2 |
$this->db_version_key = "8bit_plugin_db_version"; $this->db_version = "1.0"; |
これは今回テーブルを使用するのですがテーブルの構造変更や追加などを行う場合、このバージョンを変更することで
更新を行った際に自動的に行うようにするためです。
ただ今回は不要ですね。
1 2 |
// テーブル名 $this->table_name = $this->wpdb->prefix . '8b_plugin_tbl'; |
これは使用するテーブル名です。
$this->wpdb->prefixをはじめにつけないとWPで設定したprefixがつかないので気をつけましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// メニュー名 $this->page_title = "プラグインテスト"; $this->menu_title = "プラグインテスト"; $this->menu_capability = 2; $this->menu_page_id = 40; $this->menu_page_name = "8bit_plugin_top"; $this->menu_icon = 'dashicons-admin-home'; // サブメニュー $this->sub_menu1_title = "登録"; $this->sub_menu1_capability = 3; $this->sub_menu1_page_name = "8bit_plugin_edit"; $this->sub_menu1_page_id = 40; |
これは管理画面左側のメニューを表示するための設定値です。
1 2 3 |
// 有効化したときの処理データベースの作成 add_action( 'admin_init', array( $this, 'create_tables' ) ); add_action( 'admin_menu', array( $this, 'add_pages' ) ); |
これはWPの関数で「 add_action( ‘admin_init’, array( $this, ‘create_tables’ ) );」は「管理画面にアクセスした時にcreate_tables関数を実行しなさい」と言うことです。
同様に「add_action( ‘admin_menu’, array( $this, ‘add_pages’ ) );」は「管理メニューを作る場合にadd_pages関数を実行しなさい」となります。
最後の「$BlogPlugin = new BlogPlugin;」ですが、このクラスを実行するためのものです。
これを置かないと処理されないので忘れずに。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/** * テーブルの作成 * * @return void */ function create_tables() { $sql = ""; $charset_collate = ""; // 接頭辞の追加(socal_count_cache) // charsetを指定する if ( !empty( $this->wpdb->charset ) ) $charset_collate = "DEFAULT CHARACTER SET {$this->wpdb->charset} "; // 照合順序を指定する(ある場合。通常デフォルトのutf8_general_ci) if ( !empty( $this->wpdb->collate ) ) $charset_collate .= "COLLATE {$this->wpdb->collate}"; $installed_ver = get_option( $this->db_version_key ); if ( $this->db_version != $installed_ver ) { require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); // SQL文でテーブルを作る $sql = " CREATE TABLE {$this->table_name} ( id int4 NOT NULL AUTO_INCREMENT, sample_text varchar(32), reg_date timestamp NOT NULL DEFAULT now(), upd_date timestamp , PRIMARY KEY (id) ) {$charset_collate};"; dbDelta( $sql ); update_option( $this->db_version_key, $this->db_version ); } } |
実際に呼び出された「create_tables関数」の処理です。
毎回CREATE TABLEをするのは意味がないので、最初にdb_versionの比較を行い、値が異なる場合(初回など)に
テーブルの作成を行います。
1 2 3 4 5 6 7 8 9 |
/** * プラグインメニューの登録 * * @return void */ function add_pages() { add_menu_page( $this->page_title, $this->menu_title, $this->menu_capability, $this->menu_page_name, array( $this, 'show_plugin_list_page' ), $this->menu_icon, $this->menu_page_id ); add_submenu_page( $this->menu_page_name, $this->sub_menu1_title, $this->sub_menu1_title, 6, $this->sub_menu1_page_name, array( $this, 'show_plugin_detail_page' ) ); } |
ここでメニューを生成します。
「add_menu_page」でメインメニュー、「add_submenu_page」でその下のサブメニューを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/** * トップ画面 * * @return void */ function show_plugin_list_page() { echo "トップ画面"; } /** * サブメニュー画面 * * @return void */ function show_plugin_detail_page() { echo "登録画面"; } |
メニューを押すと「show_plugin_list_page関数」サブメニューの「登録」を押すと「show_plugin_detail_page関数」が呼び出されるので、それぞれ文字を表示するようにしましょう。
ここにフォームや処理を入れることで管理画面の機能を追加します。
ここまで来た状態で先ほどのプラグイン画面から「有効化」を押してみましょう。
こんな感じでアイコンと「プラグインテスト」と言うメニューが表示されました。
データベースを見てみると、「wp_test_plugin_tbl」テーブルが自動的に作成されてますね。
これで設定完了です。
このあとは色々と処理を入れるのですが、それは割愛します。
テンプレートにプラグインを呼び出す
作成したプラグインをテンプレートから呼び出してみましょう。
1 2 3 |
function get_now_date(){ echo date("Y-m-d H:i:s"); } |
これは単純に今の日時を表示するだけですが、使い方としてはここに表示したい情報を記述します。
これをテンプレート側で
1 |
<?php echo esc_html($BlogPlugin->get_now_date()); ?> |
で表示することで今の日時が表示されます。
最後に
今回はプラグインの基本的なベースしか説明していませんが、普通のwebアプリケーションのような事もできると思いますし、JSONで出力することもできるので可能性が色々と広がると思います。