6
6

More than 5 years have passed since last update.

データベースを使う & URL を持つ WordPress プラグインの作り方

Posted at

DB テーブルの作成/更新

register_activation_hook でプラグインの有効化時に DB テーブルの作成/更新を行います。

また、プラグインのアップグレードで DB テーブルの構造が変わることもあると思います。現状ではプラグインのアップグレード時に呼ばれるフックはないので、plugins_loaded アクションのフックでもチェックするようにします。

テーブルの作成/更新には dbDelta() が便利です。テーブルを作るだけでなく、すでにテーブルがある場合には ALTER TABLE を発行してくれます。ただ dbDelta() が受け付ける SQL には、一行あたり一カラム宣言、PRIMARY KEY のあとにスペースを二つ空けるなどの制限があるので注意しましょう。

参考
http://codex.wordpress.org/Creating_Tables_with_Plugins

URL を持つ

template_redirect アクションをフックすることで、特定の URL に対する処理を記述することができます。

ひな形

上記をまとめると、だいたい以下のような感じです。

<?php
/*
Plugin Name: Foo
Description: Foo plugin
Version: 1.0
Author: Foo Bar
*/

global $foo_db_version;
$foo_db_version = '1.0';

// Create/update db table for foo count
function foo_install() {
  global $foo_db_version;
  global $wpdb;

  $installed_ver = get_option("foo_db_version");
  if ($installed_ver != $foo_db_version) {
    $table_name = $wpdb->prefix . 'foo';
    $sql = "CREATE TABLE $table_name (
      id bigint(20) NOT NULL,
      ...
      PRIMARY KEY  (id)
    );";
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);

    add_option("foo_db_version", $foo_db_version);
  }
}
// Create DB table when activated
register_activation_hook(__FILE__, 'foo_install');
// Check DB version in preparation to upgrades when load
add_action('plugins_loaded', 'foo_install');

// Request handler
function foo_redirect() {
  // Handle only a certain URL
  if (stripos($_SERVER['REQUEST_URI'], '/foo') === FALSE) {
      return;
  }

  // Do something and make response
  status_header(200);
  echo 'Hello, World!';
  exit(); // Make sure to exit
}
add_action('template_redirect', 'foo_redirect', 1);

?>
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6