HippoBlog
Web開発に関する備忘録や
日々の雑記ブログ
  • #WordPress
  • 2019年10月26日
ENTRY TITLE

[wordpress] 自作のテーブルを追加する

TEXT BY @hippohack@hippohack
TEXT BY @hippohack@hippohack
  • このエントリーをはてなブックマークに追加

自作のプラグインを有効化した際に自作のテーブルを作成するときを想定した、基本実装部分のログ。

テーブルの作成

プラグインインストール時に実行するメソッドを定義する。

[class]

function hippo_install() {
    global $wpdb;
    $table_name = $wpdb->prefix . "hippo_values";
}
  • wp-admin/includes/upgrade.php にある dbDelta 関数を使う
  • デフォルトだと読み込まれないので、インクルードする必要あり

[class]

  function install() {
    global $wpdb;
    $table_name = $wpdb->prefix . "hippo_values";

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
      name tinytext NOT NULL,
      text text NOT NULL,
      url varchar(55) DEFAULT '' NOT NULL,
      UNIQUE KEY id (id)
    ) $charset_collate;";

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

データ投入

[class]

  function add_init_data() {
    global $wpdb;
    $name = 'hippo';
    $text = 'cool!!';

    $table_name = $wpdb->prefix . "hippo_values";

    $wpdb->insert(
      $table_name,
      array(
        'time' => current_time( 'mysql' ),
        'name' => $name,
        'text' => $text,
      )
    );
  }

定義したメソッドをフックで実行する

プラグイン有効化時にテーブルを作成して、初期データ入れる。

[class外]

register_activation_hook( __FILE__, ['HippoPlugin', 'install'] );
register_activation_hook( __FILE__, ['HippoPlugin', 'add_init_data'] );

テーブルが作成されたのを確認した。

データの読み書き

読みこみ

class1

require_once( ABSPATH . WPINC . '/wp-db.php' );

class hippp_wpdb extends wpdb {
  // オーバーライドする
  var $tables = array(
    'posts',
    'comments',
    'links',
    'options',
    'postmeta',
    'terms',
    'term_taxonomy',
    'term_relationships',
    'termmeta',
    'commentmeta',
    'hippo_values'
  );
}

class2

class HippoPlugin
{
  function get_data() {
    $wpdb = new hippp_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);

    $data = $wpdb->get_results(
      "SELECT * FROM `wphhackblog_hippo_values` WHERE id = 1"
      // "SELECT * FROM $wpdb->hippo_values WHERE id = 1"
    );

    return $data;
  }
}


HippoPlugin::get_data();
  • queryの中のテーブル名はベタで書かずに、$wpdb->hippo_values で指定するのがベターなはず。
  • ここではwp-content/db.php を作成してないせいかうまく機能せず。

書き込み(更新)

class2

class HippoPlugin
{
  function update_data() {
    $wpdb = new hippp_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);

    $id = 1;
    $new_value = 'hoge';
    $updated = $wpdb->update( 'wphhackblog_hippo_values', ['text' => $new_value], ['id' => $id] );
    return $updated;
  }
}


HippoPlugin::update_data();

ここから必要に応じてカスタムしていく感じで。

参考


最後までお読みいただき、ありがとうございました。

ご意見などありましたら@hippohackへDMをお願いいたします。

  • このエントリーをはてなブックマークに追加