PHPファイルから独自データベーステーブルを操作する
うちのサイトは独自のデータを扱っていてそれを表(テーブル)で表示させたりするのですが、記事の中に手動で表(テーブル)にデータを入れるのにも限界があるので、データベースを使って自動で表示させるようにしました。
今までもデータベースを使って自動で表示させていましたが、ワードプレスのカスタムフィールドテンプレートを使ったやり方だったので今回はPHPファイルを作ってMySQLデータベーステーブルにアクセスし、記事本文中にPHPファイルをインクルードして実行するようにしてみました。
【WP】記事本文でショートコードを使ってPHP外部ファイルをインクルードする方法
PHPファイルをインクルードの方法は上記を御覧ください。
なので、ワードプレスのシステムからも使えるようになりよりセキュリティ的にも良いし、便利に手軽に使えるようにしてみます。
既存のMySQLバックアップ
まずはMySQLデータベースをエクスポートしてバックアップ
バックアップしておけば何かあって、データが変わっちゃったとかになってもテーブルまるごとインポートすれば元に戻る。
MySQLテーブルのレイアウトを考える
データとしては商品などを扱うことが多いです。originalというテーブルを作ることにしました。
例えばMVNOの各社比較表はすぐに更新されるので全ページ手動で変えるのがメンドウです。
そういう時に独自のデータベースを使うと便利
id | cate1 | cate2 | cate3 | name | type1 | type2 | type3 | contents | price |
---|---|---|---|---|---|---|---|---|---|
mvno | onsei | museigen | ワイヤレスゲート(ヨドバシ) | 無制限 | 256kbps | 音声+256kbps データ通信プラン 縛りなし | 1,300円 | ||
mvno | onsei | museigen | OCN モバイル ONE ![]() |
15GB | 500kbps | 500kbpsコース(15GB/月)(050plus基本料300円が無料,6ヶ月縛り違約金8000円,日使い放題/500円,無料Wi-Fiスポット) | 1,800円 | ||
mvno | onsei | museigen | b-mobile | 無制限 | 制限なし | 高速定額(5ヶ月縛り違約金8000円) | 2,780円 | ||
mvno | onsei | 3gb | ワイヤレスゲート(ヨドバシ) | 3GB | 音声+3GB データ通信プラン 縛りなし | 1,700円 | |||
mvno | onsei | 3gb | IIJmio みおふぉん | 3GB | ミニマムスタートプラン (追加100MB/200円,3日/366MB規制,1年縛り利用残月☓1000円,みおふぉんダイアル通話料半額) |
1,600円 | |||
mvno | onsei | 3gb | NIFTY NifMo | 3GB | 3GBプラン(6ヶ月縛り違約金8000円,無料Wi-Fiスポット) | 1,600円 | |||
mvno | data | 5gb | OCN モバイル ONE ![]() |
5.1GB | 170MB/日コース(SMS月120円,050plus基本料300円,日使い放題/500円,無料Wi-Fiスポット) | 1,380円 | |||
mvno | data | 5gb | IIJmio | 5GB | ライトスタートプラン(SMS月140円,追加100MB/200円,3日/366MB規制) | 1,520円 | |||
mvno | data | 5gb | NIFTY NifMo | 5GB | 5GBプラン(SMS月150円,無料Wi-Fiスポット) | 1,600円 |
こんな風にテーブルを汎用性が高くしてMVNOの比較データ以外にも使えるようにレイアウトします。
phpMyAdminで新しいテーブルを作成
テーブルのレイアウトができたらphpMyAdminで新しくテーブルを作成します。
- 名前:wp_original
- フィールド数:10
wp_original テーブルを作る
テーブルを作ってみます。
utf8_generic_ciは検索するときにマッチするのが増えそうなので選びました。(日本語はコレを選ぶみたいだけど選ばなくてもいいかな?)
最後に「保存する」ボタンを押します。
新しいテーブルができました。
手動でクエリーを発行することも可能
慣れている場合は手動で、以下のようなクエリを「SQL」のページでコピペしてもいいと思います。
CREATE TABLE `データベース名`.`wp_original` (
`id` INT( 10 ) NOT NULL PRIMARY KEY AUTO_INCREMENT ,
`cate1` VARCHAR( 30 ) NOT NULL ,
`cate2` VARCHAR( 30 ) NOT NULL ,
`cate3` VARCHAR( 30 ) NOT NULL ,
`name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`type1` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`type2` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`type3` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`contents` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`price` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
) ENGINE = InnoDB
wp-db.phpにテーブル名を追加
以下必要ないです。
新しいテーブルができたらwp-db.phpに情報を追加します。
ワードプレスとは完全に独立する場合はこの作業は必要ないのですが、wp-db.phpにテーブル情報を追加したほうが簡単・便利にワードプレス上で追加したテーブルが使えるようになるし、セキュリティ的にも良いのでこれはオススメです。
public_html/wp-includes/wp-db.php
にファイルがあります。
231行目にある「$tables」の配列にwp_original
を追加します。接頭語のwp_は必要なくoriginalだけ追加すればOKです。
originalを入れます。
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
'terms', 'term_taxonomy', 'term_relationships', 'commentmeta', 'original' );
これでワードプレスのシステム内からテーブルを読み込めるようになりました。
ワードプレスのバージョンをアップグレードしたり更新するとwp-db.phpが上書きされて手動で設定したものは無くなるようです。
何故かは不明ですが定期的に上書きされるようで、オリジナルテーブルの記述の部分は削除されてしまいます。
なのでクエリー発行時に、「SELECT * FROM $wpdb->original WHERE・・・」と書かずに 「SELECT * FROM wp_original WHERE・・・」と直接テーブル名を「wp_original」などと指定するようにすれば正常動作します。
エクセルでデータをまとめてCSV化
MySQLテーブルを作ったので今度は中に入れるデータをまとめてみます。
エクセルでこんな感じでまとめてみました。
ここからは、データをCSV化しないといけないけどリンクタグのみを付けてCSV化する方法で簡単な解決方法が見つからなかったので強引に整形してCSV化しています。
これをCSVで出力するとリンクタグなどが削除されて文字列だけCSV化するので、データを選択してコピーします。
コピーしたデータをワードプレスの新規投稿ページの本文の部分に貼り付けます。
ビジュアルに貼り付けます。上記のように不要なテーブルタグなどのHTMLタグがおかしいところ多数(なぜか分からない)なので、テキストにして秀丸などのテキストエディタで整形します。
不要なテーブルを選択して上のように削除します。
次に秀丸の置換を使って正規表現でHTMLのテーブルタグをCSV化します。

]+> →” class=”size-large” /> tdタグ内に余計なstyleやwidthがあるので取り除きます。<td[^>]+> →

(.+)n → “1”;” class=”size-large” /> tdタグないのデータをダブルクォーテーションで囲って「;」で区切ります。(.+)n → “1”;

行の最後にも「;」ができてしまうので削除 ;n → n

リンクタグのダブルクォーテーションにエスケープ「」を入れる href=”([^”]+)” → href=”1″
上下のテーブルタグは手動で削除したりしました。
もっと良いやり方あるかもしれません。
phpMyAdminでCSVファイルをアップロード
あとはphpMyAdminのインポートからCSVを選んでアップロードします。
エラーが出なかったら完了。エラーが出たらおかしい行を指定されますのでもう一度CSVファイルを精査しておかしい行を修正します。(その際「空にする」で一度全データを削除してから修正したファイルをもう一度アップロードするのが良いでしょう。)
以上で下準備は完了です。
次回は、独自のテーブルを呼び出すPHPファイルを作って実際に記事本文中にインクルードしてみます。
コメント