WordPressのデータベースをカスタマイズしよう!

今回は、データベースをいじってみたいと思います。

 

 

自作データベースを利用するための大まかな手順は

  1. テーブルを作成する
  2. wp-db.phpを編集する
  3. テーブルのデータを取得する

 

になります。

目標

今回は 自作のテーブルを作成し、データを取得していきます。 データの中身は何でもいいですが、今回はプログラミングに関する参考書を登録して、 書籍名をもとに様々な情報を取得できるようになることを目標にします。

 

テーブルを作成する( DB への追加)

管理画面にアクセスしよう

ここでは新しく追加するテーブルを作成します。

データベースはphpMyAdminから作成します。

 

MySQLのAdiminをクリックして phpmyadminを開きます。

 

f:id:success-seed:20200417131232p:plain

 

データベースを選択して開いてみると、いくつかデータベースが登録されていると思います。wp-01nように はじめに登録したデータベースが WordPress 用のデータベースになっているのでそれを選択します。

 

f:id:success-seed:20200417131504p:plain

 

これらはWorPress自体にもともと設定されているデータベースです。メインのものは、

 

<接頭辞> + postmeta

投稿に関連する情報

<接頭辞> + commentmeta

コメントに関連する情報

<接頭辞> + usermeta

ユーザーに関連する情報

<接頭辞> + options

プラグインの設定に関する情報

 

です。

もし既存のテーブルにつけたせそうであれば、それを拡張する方がいいでしょう。

 

 

 

テーブルを追加しよう

それでは新しくテーブルを追加していきます。 今回はwp_booksというテーブルを作成したいと思います。

テーブル作成の部分に、 以下のように入力します。

f:id:success-seed:20200417132005p:plain

実行すると詳細を入力する画面になるので、

下の画像のように入力していきます。

今回は ID として化学参考書を識別するためのプライマリーキーとするカラムと、

nameとして参考書の名前を登録するカラム、

descriptionとして参考書の説明文を記入するカラム、

priceとして価格を入力するカラムを作りました。

f:id:success-seed:20200417133800p:plain

成功するとこのようになります。

f:id:success-seed:20200417133852p:plain

 

作成したテーブルにデータを入力しよう

今回はテストデータを入力するので、「挿入」タブを開いて、手入力していきます。

f:id:success-seed:20200417134032p:plain

 

例えばこんな感じで入力します。

 

f:id:success-seed:20200417135855p:plain

 

実行すると SQL が実行されて、データが登録されると思います。

今回は、

name

プログラミング入門講座――基本と思考法と重要事項がきちんと学べる授業

description

「プログラミングとはそもそもどういったものか」「プログラミングスキルがなぜ重要なのか」などについてわかりやすく解説されている初心者におすすめの1冊

price

1738

 

としました。「実行」した後、「表示」

「表示」を選択すると実際に登録されているかどうか確認することができます。

3冊ぐらい登録しておきましょう。

 

f:id:success-seed:20200417141916p:plain

 

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>

 

 

これによって書籍情報を検索して表示することが出来るようになります。

実際にこれを保存した後に、新しく新規投稿をしてみましょう。

するとタイトルの上に検索フォームが出現すると思います。

f:id:success-seed:20200417152839p:plain

例えば フォームにプログラミングと入力して検索してみると、

このように2冊の検索結果が表示され、 書籍や価格、説明が記載されます。

f:id:success-seed:20200417153257p:plain

以上で今回の目標達成です!