WPの独自プラグインを作ってみる3

2025.01.21 09:00
2025.01.14 12:36
WPの独自プラグインを作ってみる3

前回は独自プラグインのメニューを作成しました。
今回はDBの準備とモード操作の作成をしていきます。

1. 独自テーブルの作成と削除

DBは、独自のテーブルを作成してそれを操作していきます。
プラグインを追加した時にはテーブルを自動で追加し、
プラグインを削除した時にはテーブルを自動で削除するようにします。

hoge.phpに追記します。

/**
 * プラグイン・インストール時の関数
 * 
 */
function hoge_install_db()
{
    // DB操作用のWPの変数を取得
    global $wpdb;

    // バージョンを指定
    $db_version = '1.0';

    // テーブル名を指定
    $table_name = $wpdb->prefix . 'hoge';

    // すでにテーブルがあった場合はなにもしないで終了する
    if($wpdb->get_var("SHOW TABLES LIKE '".$table_name."'") == $table_name) {
      return;
    }

    // テーブル作成SQLを組み立て
    $sql = "CREATE TABLE ".$table_name." (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `status_id` int(11) NOT NULL,
        `spot_id` int(11) NOT NULL,
        PRIMARY KEY  (id)
    ) ".$wpdb->get_charset_collate().";";
    
    // SQLクエリを実行
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );

    // DBのバージョンを指定
    add_option( 'my_db_version', $db_version );
}

// 関数を実行
register_activation_hook( __FILE__, 'hoge_install_db' );


/**
 * プラグイン・アンインストール時の関数
 * 
 */
function hoge_uninstall_db()
{
    // DB操作用のWPの変数を取得
    global $wpdb;

    // テーブル名を指定
    $table_name = $wpdb->prefix . 'hoge';

    // テーブル削除のSQLを組み立て
    $sql = "DROP TABLE IF EXISTS $table_name";

    // SQLクエリを実行
    $wpdb->query($sql);

    // DBのバージョン情報を削除
    delete_option('my_table_db_version');
}

// 関数を実行
register_uninstall_hook(__FILE__, 'hoge_uninstall_db' );

ここではテーブル名を「wp_hoge」としています。
このテーブル名を間違うと他のテーブルを消してしまったりするので気をつけて下さい。
また、関数名は他のプラグインと被らないようにも気をつける必要があります。

2. POSTモードの設定

次にPOSTしたときのモード環境の作成と、
保存時のメッセージを作成します。

  // POSTされたら処理を行う
  if (!empty($_POST['mode'])) {
    // POST時の「mode」変数(hidden)が「save」なら
    if($_POST['mode']  === 'save') {
      // 保存完了メッセージを表示する
      echo '<div class="updated"><p>保存しました</p></div>';      
    }
  }

  // 入力画面を表示する
  echo 'テストプラグイン_ページ1を表示する関数';
  echo '<form method="post" action="' . str_replace( '%7E', '~', $_SERVER['REQUEST_URI']) . '">' . "\n";
  echo '  <input type="hidden" name="mode" value="save">' . "\n";
  echo '  <input type="submit" name="submit" class="submit_btn" value="設定を保存する">' . "\n";
  // echo '<input type="text" size="50" name="sample_plugin_entry_form" id="sample_plugin_entry_form" value="' . esc_attr(get_option('sample_plugin_entry_form')) . '">' . "\n";
  echo '</form>' . "\n";

hiddenで指定している「mode」変数のvalueによって、
動作を変更しています。これでDBの読み込みや保存などを分岐して処理します。

ちなみにclassにupdateを指定してあげると、
WPでよく見るメッセージとして表示することができます。

次回は実際にDBの操作を行っていきます。
今回は以上です!