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

2025.01.24 09:00
2025.01.14 13:51
WPの独自プラグインを作ってみる4

前回はDBの準備とモード操作を作成しました。
今回はDBでのデータの読み込み・書き込みを行います。

まずは書き込み用の関数を作成します。

function hoge_save_db()
{
  // DB操作用のWPの変数を取得
  global $wpdb;

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

  // 保存データ作成
  $datas = array(
    'status_id' => 2,
    'spot_id' => 2
  );

  // DB追加処理
  $wpdb->insert($table_name, $datas);
}

そして、前回作ったhoge_plugin_1にこの関数を実行するコードを追加します。

function hoge_plugin_1() {
  // POSTされたら行う処理
  if (!empty($_POST['mode'])) {
    // POST時のhidden変数が「hoge_save」なら
    if($_POST['mode']  === 'save') {
      // DB保存処理
      hoge_save_db();

      // 保存完了メッセージを表示する
      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 '</form>' . "\n";
}

これで保存ボタンを押せばどんどんデータが追加されていきます。
今回は「insert」を使いましたが、他には編集の「update」、削除の「delete」がありますので、適宜使い分けます。

たとえばデータ読み込みならこんな感じ。

function hoge_get_db()
{
  // DB操作用のWPの変数を取得
  global $wpdb;

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

  // 読み込みSQLクエリ組み立て
  $sql = "SELECT * FROM $table_name ;";

  // DB取得処理
  return $wpdb->get_results( $sql, ARRAY_A );
}

これはあくまでクエリ内に変数がない場合。
変数がある場合はSQLインジェクションを回避するためにprepareを使います。
たとえばIDを指定して1件だけ取得する場合などで、こんな感じです。

function hoge_get_db()
{
  // DB操作用のWPの変数を取得
  global $wpdb;

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

  // 読み込みSQLクエリ組み立て
  $sql = "SELECT * FROM $table_name WHERE spot_id = %s;";

  // エスケープ処理
  $query = $wpdb->prepare($sql, 2);

  // DB取得処理
  return $wpdb->get_results( $query, ARRAY_A );
}

spot_idに入る変数を%sとし、prepareで%sを2と指定しています。
この回りくどいことをすることでエスケープがかかり、
SQLインジェクションを防ぐことができます。

削除の場合はこんな感じ。

function hoge_delete_db($id)
{
  // DB操作用のWPの変数を取得
  global $wpdb;

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

  // データを削除
  $wpdb->delete(
    $table_name,
    array('ID' => $id),
    array('%d')
  );
}

deleteメソッドでprepareまでやっていますね。
これで取得・追加・削除までできましたので、
一通りのDB操作ができたことになります。

今回は以上です!