WordPress のポストをCSVでやりとりしようとして頓挫、それならデータベースからテーブルを書き出してFileMakerで管理してみれば面白いんじゃないかと思いついた、という話を前回(CSVエクスポート、インポート、データベース)書きました。その続きです。
FileMaker Proっていうのは最初はカード型データベースでしたが、バージョンが上がってリレーション機能を獲得しました。
リレーションというのは、例えばアドレス帳データベースで言えば、個人別アドレス帳と会社名アドレス帳があったとして、それらをIDで結びつけ連携させることができるということですね。
WordPressのデータベースももちろんそのようにリレーションされています。ポストを中心にポストメタやタクソノミーが関連づけられています。
FileMaker Proを使って構造を再現し、ローカルでちょちょいと変更、あとはCSVで書き出してMySQLにインポートすればいいんじゃないかと、まずこう思いつきます。思いついたら熟考する前にやってしまうんですね。
前回も載せたデータベース構造の図をおさらいも兼ねてここにも貼り付けます。
これです。詳細は Codexページ です。
WordPressのデータベースからテーブルごとにCSVエクスポート
全部のテーブルを書き出す必要はないんです。自分に必要なものだけやります。
自分の場合、カスタムフィールドとタクソノミーがあればそれでいいんで、以降はその路線でいきます。もしコメントが必要だったりユーザーが必要だったらそれらのテーブルもすべてエクスポートすればいいですね。
ということで、エクスポートするのは以下です。
- wp_posts
- wp_postmeta
- wp_term_relationships
- wp_term_taxonomy
- wp_terms
wp_の部分は任意なのでwordpressの設定によって各自違う文字列であろうと思われますが、ここではwp_ってことにしておきますね。
これらが何なのか簡単に説明すると次のようになります。
wp_posts
まずすべての中心はポストにあります。wp_posts です。これ基本で必須です。ID というフィールドがあります。これは post ID のことですね。大事です。
postsの面白いところは、これ投稿記事だけの話じゃなくて、カスタムポストタイプも普通にpostsに含まれます。それどころか、添付ファイル(attachment)や、カスタムメニューまで受け持っているんですね。これがpostsの正体なんですね。
というわけでwp_postsです。たくさんのフィールドがありますが選択せず気にせず、テーブルごと全部エクスポートします。
wp_postmeta
カスタムフィールドのテーブルです。
postmeta には post_id というフィールドがあって、これが posts の ID と照合されます。
フィールドは meta_key と meta_value です。カスタムフィールド名とカスタムフィールド内容ですね。簡単な構造です。
カスタムフィールドというのが何であるのか、それが明快に示されてもいます。つまりカスタムフィールドというのは、ポストにぶら下がったオマケデータであるということです。
post ID にだけ関連づけられたkeyとvalueです。何をどう書いてもいい、どんな項目を入れてもいい、ただし基本postにだけ紐付いているという、これが大事なところです。meta_key とtaxonomy は似ているようで全然違うという、そういうのがとてもよくわかる構造の図です。
wp_term_relationships
タクソノミーに関するテーブルです。タクソノミーというのは分類のデータです。カテゴリーやタグ、カスタム分類、ぜんぶタクソノミーです。カスタムフィールドと違って、分類というデータがどどーんとあって、それはポストに依存しません。依存するのではなく、結びつけるにすぎませんね。
タクソノミーには三つのテーブルが絡んでます。
まず wp_postsと直接絡んでいるのが wp_term_relationships です。ポストとタクソノミーを繋ぐ役割だけを担っています。posts の ID と wp_term_relationships の object_idが照合フィールドとなります。post_id じゃなくobject_id というフィールド名なのですね。
wp_term_relationships には基本 wp_term_taxonomy_id というフィールドだけがあって、こいつが以降のタームとの照合に使うIDとなりますね。これだけが目的のテーブルです。不思議ですね。postmeta みたいに名前とかこのテーブルに収めればいいのに、と思うのは素人の浅知恵。タクソノミー+タームという柔軟なデータを効率よく破綻なく使うための、なかなかよく練られている仕組みです。
wp_term_taxonomy
ここでタクソノミーのテーブルがやってきます。wp_term_taxonomy のフィールドは、term_taxonomy_id と term_id があって、さっきのrelationsipsと後ろに繋がるtermsを繋げます。ここでもまだタームのIDだけあって名前などはありません。繋げてるだけです。「このテーブルに名前とかスラッグとかも含めればいいのに」と思うのは素人の浅知恵、そうもいかないんですよね。なぜなら、親子の関係とかあるし、タクソノミー違いで同じ名前のタームという存在もあり得ますから。よく練られています。
wp_terms
ここでやっとタームの詳細を司るテーブルです。名前やスラッグのデータが入っている末端のテーブルです。
説明をだらだら書いててもややこしいだけですが絵にすると繋がりがよくわかります。こんなふうになっています。
wp_term_taxonomy には parent もあって、parent フィールドは term_id と照合されます。親子関係があるタクソノミーというのは wp_term_taxonomyとwp_terms の数珠つなぎの形になるんですね。だから wp_termsが別データとしてあるのでしょう。データが肥大化しない工夫かと思われます。
ということで、以上のテーブルをエクスポートします。
myAdmin からエクスポート
myAdminにログインしてテーブルを選択してエクスポートからCSVエクスポートを選びます。エクセル形式が判りやすくてよいと思います。CSVの他の形式の場合、1行目をどうするとか細かな設定ができますが設定にしくじると表計算で開いてみたらガッカリってなことになりかねません(←よくそうなってしまったらしい)1行目にはフィールド名を忘れずに追加しましょう。
あと気をつけるのは保存ですね。ファイルに保存するにチェック入れないとブラウザで開いてしまいます。ブラウザが固まったかと思うほどデータ量多くて大変な目に遭いますよ(←大変な目に何度も遭ってるらしい)
さてこうしてデータベースのテーブルをエクスポート。CSVデータが揃いました。
これらのファイルを FileMaker Pro で開いてローカル疑似Wordpress データベースを作るというのが次の目的です。
FileMaker Pro にCSVファイルをインポート
… インポートまで書くのが目的のはずでしたがまた長くなってきたのでポストを分けることにしました。
今回はWordpressのMySQLデータベースから主要なものをCSVダウンロードするというだけのお話になりました。つづきはまた近いうちに。ごきげんよう。
つづく
*続きました。次の記事はFileMaker +WP FileMaker にWordPressデータベーステーブルのCSVインポートです。