公開したり販売するつもりはない自身だけがWP構築で使用したいと思ったものをプラグインにしてみようかと思い、ちょっとずつプログラミングしていくなかで、色々と壁に当たり調べながらの作業だったけど、少しずつゴールが見えてきたので、ぶつかった壁の解決策をここに残しておきます。

同じような境遇でお困りの方にちょっとでも参考になればと思います。

 

今回はプラグインをインストールする時に動作したり認識される基本設定的なものです。

「my_plugin」「MY_PLUGIN」の部分は、自身がプラグインを制作するにあたり任意で名前をつけてください。

 

【プラグインのファイルを準備】

フォルダを作成し、任意の名前をつける(ここではmy_pluginとする)。そのなかに、my_plugin.phpというPHPファイルを作成し、以下のソースを挿入し保存しておく。

 

【最初に読み込むPHPファイルに用意するもの】※ここではmy_plugin.php

/*
* Plugin Name: MY PLUGIN
* Plugin URI:
* Description: プラグインの簡単な説明
* Version: 1.0
* Author: Kazinchu
* Author URI: https://Kazinchu.com
*/

if ( !function_exists( 'add_action' ) ) {
echo 'ここに一先ずエラー発生文を用意しておく';
exit;
}

define( 'MY_PLUGIN_VERSION', '1.0' ); // このプラグインのバージョン
define( 'MY_PLUGIN_MINIMUM_WP_VERSION', '5.0' ); // プラグインをインストールするWPの最低バージョン
define( 'MY_PLUGIN_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); // プラグインのディレクトリパス
define( 'MY_PLUGIN_PLUGIN_URL', plugins_url( '/', __FILE__ ) ); // プラグインのURL
define( 'MY_PLUGIN_DELETE_LIMIT', 10000 ); // よくわからんけど一応


//=================================================
// 初期設定
//=================================================
global $wpdb; // DBを扱う場合
global $db_table; // DBを扱う場合
global $emsg; // アラートメッセージ表示を扱う場合
global $myplugin_db_version; // プラグインのDBバージョン(いるかな?)

$db_table = array('myplugin' => $wpdb->prefix."myplugin");
$emsg = new WP_Error();
$mymemo_db_version = "1.0";




//=================================================
// インストール
// プラグイン有効時に実行
//=================================================
register_activation_hook(__FILE__, 'myplugin_install');

// インストール
function myplugin_install () {

require_once( ABSPATH.'wp-load.php');
global $wpdb;
global $db_table;
global $emsg;
global $mymemo_db_version;

//---------------------------------
// インストール時、DBが必要な場合はテーブル作成
//---------------------------------
if($wpdb->get_var("show tables like '".$db_table['myplugin']."'") != $db_table['myplugin']) {

$sql['myplugin'] = "CREATE TABLE ". $db_table['myplugin'] ." (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`text` LONGTEXT,
`created` DATETIME NOT NULL,
`modified` DATETIME NOT NULL,
PRIMARY KEY (`id`)) ENGINE = InnoDB;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$result['myplugin'] = $wpdb->query($sql['myplugin']);

if($result['myplugin']) {
$emsg->add( 'success', 'インストール成功しました。' );
} else {
$emsg->add( 'error', 'インストール失敗しました。' );
}

add_option("myplugin_db_version", $myplugin_db_version);
}
}


//=================================================
// アンインストール
// プラグイン無効時に実行
//=================================================
register_deactivation_hook(__FILE__, 'myplugin_uninstall');

// アンインストール
function myplugin_uninstall() {

require_once( ABSPATH.'wp-load.php');
global $wpdb;
global $db_table;

アンインストール時、DBが不必要な場合はテーブル削除
$wpdb->query("DROP TABLE IF EXISTS ".$db_table['myplugin']);
delete_option("myplugin_db_version");
}

 

出来上がったPHPファイルをフォルダごとWordPressのwp-contents > pluginsの中に移動させます。いずれ公開し配布する場合はのちに圧縮する必要があると思いますが、今回は開発段階のためにローカル環境で作業できると想定しています。

これでひとまずプラグインと認識され、インストール時とアンインストール時に実行されるファイルが完成になります。

SQL文が書ければある程度のDBにデータの登録や削除などが行え、もっと凝ったプラグインが制作出来ると思います。