WordPressのデータベース操作

1Reading Time

自作(オリジナル)テーブルの作成方法

WordPress標準のテーブルでは管理できない情報を保存するためには、新たにテーブルを作成する必要があります。まずはテーブルを作成し、WordPressに認識させる方法をまとめます。

手順は3つ。

  1. テーブルの作成
  2. WordPressへのテーブルの登録
  3. WordPressプラグインからの確認

1.テーブルの作成

テーブルの作成は「phpMyAdmin」を使用します。テーブルの作成方法に関してはここでは省略します。
サンプルとして、以下のフィールドを持った会員管理テーブル(wp_member)を作成しました。

member_id:メンバーID bigint(20) AUTO_INCREMENT
member_name:メンバー名 varchar(50) utf8_unicode_ci
member_email:メールアドレス varchar(100) utf8_unicode_ci

Point

テーブル名に必ず WordPress と同じプリフィックス(接頭辞)を付けます。例えば WordPress のプリフィックスが初期設定のまま「wp_」となっている場合は、新しいテーブル名を wp_xxx (xxxは任意)とします。ここではwp_memberとしました。

グローバルリンク - WordPressのデータベース操作

グローバルリンク - WordPressのデータベース操作※インデックスの「サイズ」は入れない

 

2.WordPressへのテーブルの登録

WordPressでは「$wpdb」というグローバル変数(オブジェクト)を通してDBの各テーブルにアクセスすることができます。この$wpdbに自作テーブルを認識させるため、「wp-includes」フォルダにある「wp-db.php」を修正します。

ただし、「wp-db.php」ファイルを直接変更しても、WordPressのバージョンアップなどで上書きされてしまう可能性がありますので、「db.php」という名前のファイルを作成し、「wp-content」フォルダに入れることで、「wp-db.php」ではなく、「db.php」をインクルードします。

db.phpの説明

<?php 
require_once( ABSPATH . WPINC . '/wp-db.php' );
class my_wpdb extends wpdb {
    var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
                        'terms', 'term_taxonomy', 'term_relationships', 'termmeta',
                        'commentmeta', 'member' );
            //追加するときwp_はいりません
}
if ( ! isset($wpdb) ) {
    $wpdb = new my_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
}
?>

3.WordPressプラグインからの確認

オリジナルのプラグイン「顧客管理」を作成し、そこにリストを表示してみます。


<?php
/*
Plugin Name: 顧客管理
Author: Global Link
Plugin URI: 
Description: 
Version: 0.1
Author URI: https://global-business.link/
*/

/* 管理画面に顧客リストを表示する */
add_action( 'admin_menu', 'my_custom_menu_page');

function my_custom_menu_page(){
    add_menu_page('顧客一覧', '顧客一覧', 'manage_options', 'customer_list_menu', 'customer_list_page', '', 4 );
}

function customer_list_page(){
    global $wpdb;
    echo "<h2>顧客一覧ページ</h2>";
    $result = $wpdb->get_results('SELECT * FROM wp_member');
    //ここはwp_を付ける
    if (!$result) die('error.');
        foreach($result as $row) {
            echo $row->member_name . $row->member_email . "<br />";
        }
}

?>

参考サイトURL

以下のサイトを参考としました。こちらと合わせて参照してください。

関数リファレンス/wpdb Class

自作テーブルの追加からデータ取得まで!WordPressでデータをDBに保持して使う方法

WordPressで自作テーブルにアクセスする方法