WordPressのデータベースをカスタマイズしよう!
今回は、データベースをいじってみたいと思います。
自作データベースを利用するための大まかな手順は
- テーブルを作成する
- wp-db.phpを編集する
- テーブルのデータを取得する
になります。
目標
今回は 自作のテーブルを作成し、データを取得していきます。 データの中身は何でもいいですが、今回はプログラミングに関する参考書を登録して、 書籍名をもとに様々な情報を取得できるようになることを目標にします。
テーブルを作成する( DB への追加)
管理画面にアクセスしよう
ここでは新しく追加するテーブルを作成します。
データベースはphpMyAdminから作成します。
MySQLのAdiminをクリックして phpmyadminを開きます。
データベースを選択して開いてみると、いくつかデータベースが登録されていると思います。wp-01nように はじめに登録したデータベースが WordPress 用のデータベースになっているのでそれを選択します。
これらはWorPress自体にもともと設定されているデータベースです。メインのものは、
<接頭辞> + postmeta |
投稿に関連する情報 |
<接頭辞> + commentmeta |
コメントに関連する情報 |
<接頭辞> + usermeta |
ユーザーに関連する情報 |
<接頭辞> + options |
プラグインの設定に関する情報 |
です。
もし既存のテーブルにつけたせそうであれば、それを拡張する方がいいでしょう。
テーブルを追加しよう
それでは新しくテーブルを追加していきます。 今回はwp_booksというテーブルを作成したいと思います。
テーブル作成の部分に、 以下のように入力します。
実行すると詳細を入力する画面になるので、
下の画像のように入力していきます。
今回は ID として化学参考書を識別するためのプライマリーキーとするカラムと、
nameとして参考書の名前を登録するカラム、
descriptionとして参考書の説明文を記入するカラム、
priceとして価格を入力するカラムを作りました。
成功するとこのようになります。
作成したテーブルにデータを入力しよう
今回はテストデータを入力するので、「挿入」タブを開いて、手入力していきます。
例えばこんな感じで入力します。
実行すると SQL が実行されて、データが登録されると思います。
今回は、
name |
プログラミング入門講座――基本と思考法と重要事項がきちんと学べる授業 |
description |
「プログラミングとはそもそもどういったものか」「プログラミングスキルがなぜ重要なのか」などについてわかりやすく解説されている初心者におすすめの1冊 |
price |
1738 |
としました。「実行」した後、「表示」
「表示」を選択すると実際に登録されているかどうか確認することができます。
3冊ぐらい登録しておきましょう。
wp-db.phpを編集
ここまでで新しいテーブルを作ることはできましたが、まだそのテーブルを WordPress 側から操作することはできません。 そこでここでは、 WordPress に テーブルを認識させるための設定を行っていきます。
WordPress ではwpdbというクラスを使ってデータベースを掃除することができます。
テーブル名をwp-db.phpに追加しよう
wp-includesディレクトリにあるwp-db.phpを探して、tables=となっている部分を探します。ここが、テーブルを設定している部分なので、 ここに自分で作ったテーブルを付け足します。
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta', 'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta', );
ちなみに「wp_」の部分は付け足す必要はありません。
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta', 'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta',
'books' );
これでwpdbを使って追加テーブルにアクセスできるようになります。
追加したテーブルにアクセスしてみよう
それでは実際にwpdbが使えるかどうか見てみましょう。
どこで実行しても良いのですが、例えば、デフォルトのテーマであるtwentytwentyを実行しているなら、singular.php の
<main id="site-content" role="main">
の下に以下を追加して、新しく記事を作成すると、booksが追加されているのを確認できます。
<?php global $wpdb;foreach ($wpdb- >tables as $key => $value) { echo '<p>[' . $key . ']' . $value . '</p>';} ?>
出力結果
[0]posts
[1]comments
[2]links
[3]options
[4]postmeta
[5]terms
[6]term_taxonomy
[7]term_relationships
[8]termmeta
[9]commentmeta
[10]books
テーブルからデータを取得しよう
最後に登録したデータを WordPress から取得してみたいと思います。
先ほどsingular.phpに追加したコードの下に、さらに以下を追加しましょう。
<?php // 検索キーワード 書籍名 $book_title = isset($_GET['keyword']) ? $_GET['keyword'] : ""; // 検索結果メッセージ $message = ( isset($_GET['keyword']) && (!$book_title) ) ? "検索する書籍名を入力!" : ""; global $wpdb; $wpdb->show_errors(); // キーワードが設定されているときの処理内容 if ($book_title) { //書籍名、説明、価格を取得するためのSQL $sql = $wpdb->prepare("SELECT p.name, p.description, p.price FROM $wpdb->books p WHERE p.name LIKE %s", '%'.$book_title.'%' ); // クエリ実行 $rows = $wpdb->get_results($sql); // 検索結果表示するときのメッセージ $message = (!$rows) ? "該当する本は見つかりませんでした。" : count($rows)."件の本が見つかりました。"; } // 本の説明と価格を表示 if($rows){ foreach ($rows as $row) { echo "<p>【".$row->name."】価格:".$row->price."円<br>概要:".$row->description."</p>"; } } ?> <!-- 検索フォーム --> <form class="" id="" role="search" action="./" method="get"> <div> <label for="search_box">書籍名検索</label> <input class="" type="text" name="keyword" placeholder="" value="<?php echo $book_title; ?>" /> <input type="submit" value="検索する" /> </div> </form> <!-- 検索結果 --> <p> <?php echo $message; ?> </p>
これによって書籍情報を検索して表示することが出来るようになります。
実際にこれを保存した後に、新しく新規投稿をしてみましょう。
するとタイトルの上に検索フォームが出現すると思います。
例えば フォームにプログラミングと入力して検索してみると、
このように2冊の検索結果が表示され、 書籍や価格、説明が記載されます。
以上で今回の目標達成です!