*

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

WordPressにテーブルを追加する方法

WordPressでWebサイトを作ったとき、何かしらのデータをデータベース上に保持しておき必要に応じて参照できるようにしたいと考えたことはありませんか?

例えば

「自社の製品情報をデータベースに入れておいて、条件にマッチするものだけ表示したい」

といったケースです。

今回はそんなとき人のために「データベースに独自のテーブルを追加して、WordPress(PHPファイル)からアクセスする方法」をご紹介します。

「WordPressの構造がよくわからないし、手を出せないでいた・・」という方は、是非参考にしてみてください。

はじめに

作業環境

これからご説明する作業はローカル環境で行っています。このページを見て自分もやってみようという方も、いきなり本番用のサーバで試すのはリスキーですのでまずはローカル環境で試してみましょう。

ちなみに私はmacでWordPressの環境を構築しています。

前提知識

今回データベースへアクセスするプログラムはPHPを使います。PHPの基礎的な構文は理解できることを前提にお話を進めていますので、その点ご了承ください。

作業前にバックアップを!

データベース周りの作業を誤ったり、変数名が他と重複したりして予期せぬトラブルが起こる可能性もあります。何かあっても元に戻せるよう、データベースおよび編集対象のファイルのバックアップを残しておくことをお勧めします。

 

目標:自作テーブルのデータをキーワードで検索して結果を表示する

手を動かす前に、何を作るのかゴールを明確にしておきましょう。

今回は例として「製品名でキーワード検索して該当製品があれば価格が表示される」というものを作ります。

目標:製品名で検索して価格を表示

WordPressが使っているテーブルたちの中に自作のテーブル「製品テーブル(wp_products)」を追加して、そこに入っているデータを製品名で検索して表示する、ということですね。

上図の完成形から逆算して、そのために必要なモノ・コトをひとつずつこなしていきましょう。

# 料理で言えば「まず出来上がった皿をイメージしてから、必要な材料を揃えレシピどおり作っていく」という感じです。そうすることで材料や手順からムダを排除できます。

 

手順:テーブル作成からデータ取得までの3ステップ

これから「テーブルを作成(追加)」→「wp-db.phpを編集」→「追加テーブルのデータ取得」の3ステップで作業を進めます。

今回の例では以下のような「製品テーブル (wp-products)」を作成して、WordPressのデータベースに追加します。

表1. 製品テーブルとデータ
id name(製品名) price(価格)
1 製品A 100000
2 製品B 300000
3 製品C 500000

 

テーブルの項目はid/name(製品名)/price(価格)の3つで、ダミーデータとして製品A〜Cを持ちます。

以降、前半のステップで製品テーブルを作成し、後半のステップでこのテーブル中の製品A〜Cについて価格情報を取得するようなものを作っていきます。

ではさっそく手順を見ていきましょう。

 

【STEP1】テーブルを作成(既存DBへの追加)

【1】テーブルの新規作成STEP1ではデータを保持するためのテーブルを作成します。 上述のとおり、ここでは「製品テーブル(wp_products)」を作成して追加します。

 

テーブル名、カラム数の設定

まずMAMPを起動し、phpmyadminを開きます。

phpmyadminでテーブルを追加するデータベースを指定し、「操作」タブをクリックします。操作画面が開いたら「テーブルを作成」欄にテーブルの名前とカラム数(テーブルの列項目の数)を入れます。※カラムは後から追加/削除することもできます。

この例では「id」「製品名」「価格」の3項目をテーブルに用意するので、カラム数は3としています。

テーブル作成その1

 

 

テーブル構造(カラムの定義)の設定

続けて、各列(カラム)の型など、テーブルの構造を定義します。

話をシンプルにするため、単純に数値は「INT」型、文字列は「VARCHAR」型を使っています。また長さはおおよそこれだけあれば大丈夫であろうという数値を入れています。

idカラムについては「A_I」(Auto Increment)にチェックを入れていますが、こうしておくとテーブルにデータが追加される度に自動で番号がセットされます。例えばデータ追加時に「id=1」と指定しなくても最初の追加データなら自動的にid=1が設定されます。

テーブル作成その2

以下は上の図を拡大したものです。

テーブル作成その3

各項目の値を入力したら、右下の「保存する」ボタンを押します。

 

作成したテーブルが一覧に表示されているか確認

前段で正常に処理が完了していれば、作成したテーブルが一覧に表示されます。この例では、製品テーブル(wp-products)が追加されています。

テーブル作成その4

 

作成したテーブルへデータを投入

前段で追加した製品テーブルに以下の製品A〜Cを投入します。

phpmyadminの「挿入」タブを開いて、ひとつずつ手入力していきます。

追加テーブルへデータ投入その1

製品データを入れ終わったら、「表示」タブを開いて投入したデータを確認します。

追加テーブルへデータ投入その2

自作テーブルに製品A〜Cのデータが登録されていますね。

これでSTEP1「テーブルを作成(既存DBへの追加)」は完了です。

 

以降のステップで、この製品テーブルのデータを取得する方法を説明していきます。

 

【STEP2】wp-db.phpを編集

【2】wp-config.phpにテーブル名を追加WordPressでは「$wpdb」というグローバル変数(オブジェクト)を通してDBの各テーブルにアクセスすることができます。この$wpdbに自作テーブルを認識させるため、以下の手順でwp-db.phpファイルを編集します。

 

自作テーブル名の追記

wp-includesディレクトリ配下にある「wp-db.php」に、STEP1で追加したテーブル名を追記します。

まずwp-db.phpファイル中から以下の部分を探します。

次に$tables配列の中に「products」を追加します。
※テーブル名にプレフィックス” wp_ “を付ける必要はありません。

これで$wpdbオブジェクトから追加テーブルにアクセスできるようになりました。

 

追加したテーブルが$wpdbに反映されていることを確認

上記で追加したテーブルに$wpdbオブジェクトからアクセスできるか確認してみましょう。

試しに以下のコードを適当なページ内で実行してみると・・・

ちゃんと$wpdbオブジェクトの中に”products”が含まれていますね。

これでSTEP2「wp-db.phpの編集」は完了です。

 

【STEP3】追加テーブルのデータ取得

【3】テーブルのデータ参照

上記のSTEP1,2で独自のテーブルを追加し、$wpdbオブジェクトからアクセスできるようになりました。次はPHPプログラムでデータベースにアクセスしてテーブルのデータを取得する手順をご説明します。

 

自作テーブルのデータを取得するPHPプログラム(ソースコード)

今回追加した製品テーブルからデータを取得して表示する、簡単なコードを書いてみました。

コードの構成をざっくり説明すると、

  • 1-37行目:【PHP】入力されたキーワードをもとにテーブルからデータ取得
  • 38行目〜:【HTML】製品名(検索キーワード)を入力する欄、検索ボタンなど

という形になっています。

流れとしては「HTMLでキーワードの受け取り→PHPでテーブルのデータ取得→HTMLで結果表示」ということですね。

なお本来なら入力値のチェックをする必要がありますが(※)、話を単純にするため今回は割愛します。

※)入力値の検証などWebプログラミングのセキュリティついて基本的な考え方を知りたい方は、その世界で有名な徳丸さん「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 」の書籍を読むことをお勧めします。

 

DBアクセスにはwpdbクラスのメソッドを利用する

テーブルからのデータ取得には$wpdbを使います。$wpdbはwpdbクラスのオブジェクトですので、wpdbクラスが持つ様々なメソッドを使うことができます。テーブルデータの参照/取得や更新・削除などDBアクセス時に必要な様々なメソッドが用意されており、今回の例でもそれらを利用しています。

例えば、上記コード20行目の$wpdb->prepareは”プレースホルダ”という仕組みを使ってSQLインジェクション攻撃からクエリを保護するためのメソッドです。

また24行目の$wpdb->get_resultsはテーブルからデータを取得するためのメソッドです。引数にセットしたSQL(ここではSELECT文)を実行して該当する行データ(id、製品名、価格)を取得しています。

これらwpdbクラスのメソッドを組み合わせて、製品テーブルから価格他のデータを取ってきているわけですね。

wpdbクラスのメソッドについて詳しく知りたい場合はwpdbの公式レファレンス(日本語)をご覧ください。※英語版(Class Reference/wpdb)より若干情報が少ないようですが、基本的な部分では問題になることはないでしょう。

 

製品名でキーワード検索して結果を表示してみる

いよいよ最終段階です。

前段のコードをローカル環境のページ(PHPファイル)内のどこかに貼り付けてください。

私の場合はサイドバー(sidebar.php)に貼り付けてみました。※使っているWordPressテーマはTwentyTwelveです。

以下のように検索欄とボタンが表示されればOKです。

キーワード(製品名)検索欄

 

該当する製品がある場合

試しに「製品A」で検索してみます。

キーワード(製品名)検索:製品A

製品Aがヒットして価格が表示されました!

キーワード(製品名)検索:1件該当

単に「製品」で検索すると・・

キーワード(製品名)検索:3件該当

複数の製品がヒットしました。それぞれの価格も表示されています。

 

該当する製品がない場合

検索がヒットしない場合はどうでしょうか?

該当製品が無い場合は、「見つからない」とメッセージ表示します。

キーワード(製品名)検索:該当なし

また、キーワードを入れないで検索ボタンを押した場合は、製品名を入れるよう促します。

キーワード(製品名)検索:未入力


 

これで目標の「自作テーブルのデータをキーワードで検索して結果を表示する」が達成できました。お疲れ様でした!

 

まとめ

独自のテーブルを追加してプログラムからSQLでデータを取得、それをWordPressのページに表示するところまで一連の流れを見てきましたが、いかがでしたでしょうか?

データベースにデータを保持する方法がわかると、WordPressのサイトでできることがぐっと広がります。その分注意すべきことも増えますが、メリットも大きいのでやり方を覚えておいて損はないでしょう。

なおサイト訪問者からの入力を受け取ってDBにアクセスするプログラムは、SQLインジェクション対策がなされていないとセキュリティホールになってしまう可能性があります。特に重要なデータを扱うサイトでは、入力値の検証等を入念に行ってください。 ※具体的な施策については上述の徳丸さんの本で勉強することをお勧めします。

 

もしこの手順を試してもうまくいかなかったところなどあればお知らせください。

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

PR

関連記事

Rubyで小数点第2位以下を切り捨てる方法

Rubyには標準で便利なメソッドがたくさん用意されています。数値の取り扱いについてもNumericク

記事を読む

WordCamp2014tokyo

WordCamp2014 Tokyo に行ってきました。

もう一週間ほど経ってしまいましたが、先週末に初めてのWordCamp(WordCamp Toky

記事を読む

HTMLもCSSもまとめて一式ダウンロードできるmacアプリ

URLを指定するだけでWebサイトを丸ごとダウンロードできるMacアプリ『SiteSucker』

Web制作をしていると、特定のサイトをローカルにダウンロードしたいと思うことがありませんか?

記事を読む

wordpress_on_mac

【保存版】WordPressのサイトをmacのローカル環境にコピーして動かす方法

WordPerssで作った既に公開中のWebサイトについて、サイトを丸ごとローカル環境に持ってき

記事を読む

WordPressでページ送りができない

次のページが表示されない!WordPressでページ送りができないときの原因と対処方法

先日対応したお客様のWordPress案件で、category.phpに「同カテゴリーに属する情

記事を読む

Public Post Previewプラグイン

公開前のページを第三者にシェア!『Public Post Preview』は下書きページへの共有リンクを発行できるプラグイン

公開前のページを第三者に確認してもらうのに便利なプラグイン『Public Post Previe

記事を読む

Revision Control

ムダな履歴データの蓄積をストップ!『Revision Control』で投稿ページ・固定ページの変更履歴をスマートに管理

投稿ページ・固定ページの「変更履歴」を制御するプラグイン『Revision Control』をご

記事を読む

DashboardNotePadプラグイン

付箋紙のようにメモ書きできる!『Dashboard Notepad』はWordPressのダッシュボードにメモを残せるプラグイン

WordPressで管理画面のダッシュボードにメモを残せるようになるプラグイン『Dashboar

記事を読む

brewでmacのOpenSSLをバージョンアップ

macでローカル環境のopensslをバージョンアップする手順 〜 brewで更新→rbenvでrubyを再インストール 〜

先日自社の運営サイトのSSL証明書の更新作業をしたのですが、ローカル環境として使っているmacで

記事を読む

Crayon Syntax Highlighter

【入れるだけ】投稿記事中のコードをキレイに表示!『Crayon Syntax Highlighter』はシンタックスハイライトをかけるプラグイン

WordPressの投稿記事中のコードをキレイに表示できるプラグイン「Crayon Syntax

記事を読む

PR

Comment

  1. […] 自作テーブルの追加からデータ取得まで!WordPressでデータをDBに保持して使う方法 http://blog.yukarien.com/tech/wordpress-db-access/ […]

  2. […] ーブルの追加からデータ取得まで!WordPressでデータをDBに保持して使う方法 http://blog.yukarien.com/tech/wordpress-db-access/ mysqlに画像を保存するプログラム[php] http://mekori.hatenablog.com/entry/2013/07/04/020 […]

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

  4. Pyomie より:

    素晴らしいです!WPとDBを一から連携させる情報がなかなか見つからない中、たどり着きました。
    書いてある通りにやって、何の問題もなく連携できました。セキュリティ面に触れていることもナイスです。
    ありがとうございます!

  5. 匿名 より:

    とても参考になりました。ワードプレスでアプリケーションを作りたいので記載の通りやってみます!今後もこういう記事期待します。

    • yukarien より:

      お役に立てて光栄です。
      ワードプレス活用の幅が広がるような記事をまた書ければと思ってます。

コメントを残す

PR

【Git】一つ前のcommitに戻す/他のブランチのcommitを取り込む

久しぶりにRailsでプログラムを書いている関係で、これまた久しぶりに

WordPressの子テーマで画像が表示されないときはstylesheet_directoryを使っているか確認する
WordPressの子テーマで画像が表示されないときはstylesheet_directoryを使っているか確認する

先日とあるお客様のWordPressサイトで「画像が表示されない」

おすすめGoogle拡張リスト
【保存版】情報収集を快適に!Chromeに入れておきたいオススメ拡張(エクステンション)8個

私はChromeをメインブラウザとして使っていますが、その理由のひとつ

Rubyで小数点第2位以下を切り捨てる方法

Rubyには標準で便利なメソッドがたくさん用意されています。数値の取り

BootstrapでWordPressサイトをレスポンシブデザイン化
【やって覚える】BootstrapでWordPressサイトをレスポンシブデザイン化する方法

  先日Googleから「4/21以降、サイトのスマホ

→もっと見る

  • feedlyでフォロー RSS登録ボタン
  • 株式会社YUKARIでは、ホームページリニューアルをメインにWeb制作事業を行っています。既存サイトへのWordPress導入・レスポンシブデザイン化からSEO強化まで何でもご相談ください。 ホームページリニューアルをお考えの方からのお問い合わせをお待ちしております。
PAGE TOP ↑