ワードプレスで表を使うため独自データベース テーブルを作成してデータ整形する

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

  • 名前:wp_original
  • フィールド数:10

wp_original テーブルを作る

wp_original テーブルを作る

テーブルを作ってみます。

テーブルのフィールドを書き込みます。

テーブルのフィールドを書き込みます。

utf8_generic_ciは検索するときにマッチするのが増えそうなので選びました。(日本語はコレを選ぶみたいだけど選ばなくてもいいかな?)

最後に「保存する」ボタンを押します。

 CREATE TABLE `go1600_bey`.`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

新しいテーブルができました。

手動でクエリーを発行することも可能

慣れている場合は手動で、以下のようなクエリを「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

CREATE TABLE `データベース名`.`wp_original`

wp-db.phpにテーブル名を追加

以下必要ないです。

新しいテーブルができたらwp-db.phpに情報を追加します。

ワードプレスとは完全に独立する場合はこの作業は必要ないのですが、wp-db.phpにテーブル情報を追加したほうが簡単・便利にワードプレス上で追加したテーブルが使えるようになるし、セキュリティ的にも良いのでこれはオススメです。

public_html/wp-includes/wp-db.php

にファイルがあります。

231行目にある「$tables」の配列にwp_originalを追加します。接頭語のwp_は必要なくoriginalだけ追加すればOKです。

231行目あたりの$tablesに追加

231行目あたりの$tablesに追加

originalを入れます。

var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
        'terms', 'term_taxonomy', 'term_relationships', 'commentmeta', 'original' );

originalを入れる。

originalを入れる。

 これでワードプレスのシステム内からテーブルを読み込めるようになりました。

ワードプレスのバージョンをアップグレードしたり更新するとwp-db.phpが上書きされて手動で設定したものは無くなるようです。

何故かは不明ですが定期的に上書きされるようで、オリジナルテーブルの記述の部分は削除されてしまいます。

なのでクエリー発行時に、「SELECT * FROM $wpdb->original WHERE・・・」と書かずに 「SELECT * FROM wp_original WHERE・・・」と直接テーブル名を「wp_original」などと指定するようにすれば正常動作します。

エクセルでデータをまとめてCSV化

MySQLテーブルを作ったので今度は中に入れるデータをまとめてみます。

ScreenClip

エクセルでこんな感じでまとめてみました。

ここからは、データをCSV化しないといけないけどリンクタグのみを付けてCSV化する方法で簡単な解決方法が見つからなかったので強引に整形してCSV化しています。

 

これをCSVで出力するとリンクタグなどが削除されて文字列だけCSV化するので、データを選択してコピーします。

作ったデータをコピーして

作ったデータをコピーして

コピーしたデータをワードプレスの新規投稿ページの本文の部分に貼り付けます。

ワードプレスの新規投稿ページのビジュアルの本文に貼り付ける

ワードプレスの新規投稿ページのビジュアルの本文に貼り付ける

ビジュアルに貼り付けます。上記のように不要なテーブルタグなどのHTMLタグがおかしいところ多数(なぜか分からない)なので、テキストにして秀丸などのテキストエディタで整形します。

表を削除で要らないテーブルタグを取り除く

表を削除で要らないテーブルタグを取り除く

不要なテーブルを選択して上のように削除します。

次に秀丸の置換を使って正規表現でHTMLのテーブルタグをCSV化します。

"tdタグ内に余計なstyleやwidthがあるので取り除きます。<td[^

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

"tdタグないのデータをダブルクォーテーションで囲って「;」で区切ります。<td

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

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

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

リンクタグのダブルクォーテーションにエスケープ「」を入れる href=

リンクタグのダブルクォーテーションにエスケープ「」を入れる href=”([^”]+)” → href=”1″

こんな風に正規表現で地道にテーブル<>タグを「;」に置換えしてaタグのダブルクォーテーションをエスケープして手動でCSV化しました(汗)

上下のテーブルタグは手動で削除したりしました。

もっと良いやり方あるかもしれません。

phpMyAdminでCSVファイルをアップロード

phpMyAdminでCSVアップロード

phpMyAdminでCSVアップロード

あとはphpMyAdminのインポートからCSVを選んでアップロードします。

エラーが出なかったら完了。エラーが出たらおかしい行を指定されますのでもう一度CSVファイルを精査しておかしい行を修正します。(その際「空にする」で一度全データを削除してから修正したファイルをもう一度アップロードするのが良いでしょう。)

 

以上で下準備は完了です。

次回は、独自のテーブルを呼び出すPHPファイルを作って実際に記事本文中にインクルードしてみます。

コメント

タイトルとURLをコピーしました