2011/05/04

書誌情報とカバー画像

「カスタム投稿」という機能を使うことは決定した。何点か投稿してデータベースの構造を探ってみることにした。

ワードプレスのデータベース名はwpでテーブルがいくつかある。現サイトでは書誌情報は1頁ごとのhtmlファイルである。すでにその情報はある程度構造化してデータベースに格納してある。ワードプレスでは、一点ごとに投稿という形で書誌情報を登録することになり、その除法が格納されるテーブルがwp_posts。今回、書誌情報の色々なスペック(定価、判型、ISBNなど)はカスタムフィールドという機能を使って投稿することとした。そのデータはwp_postmetaというテーブルに格納される。

wp_postsとwp_postmetaの関係はwp_postsのIDがwp_postmetaのpost_idと一致するということ。ちなみにwp_postsのIDはauto_incrementで、wp_postmetaのauto_incrementなキーはmeta_idとなる。

wp_postmetaの構造は結構シンプルで、同名のキーがあっても問題ないように考慮されているようだ。今回は、投稿タグやカテゴリには手を出していない。そっちはテーブルの関係は若干入り組んでいる。

第一段階として行ったことは、まずwp_postsに書籍名、目次、内容などのデータを挿入し、そのレコードのIDを取得して、それをwp_postmetaのpost_idの値にして書誌情報データを挿入。目次や内容の値は、アポストロフィー等の記号をちゃんとエスケープしておかないといけない。

次はカバー画像。投稿の中に挿入するよりも、「アイキャッチ画像」という機能を使った方がよさげである。 そこで、同様に何点か挿入してからデータベースの動きを見る。

関係のあるテーブルは先ほどと同じで、wp_postsとwp_postmeta。
注目すべきwp_postsの項目は次の通り。
  • ID:auto_incrementな値。仮に画像投稿IDとしておく。
  • post_status:データの公開状況。親の状態を継承。
  • post_title:画像のタイトル。
  • post_name:投稿の名前。
  • post_parent:親子関係。この画像がアイキャッチ画像として使用される投稿のID。
  • post_type:投稿データのタイプ。attachmentでメディア。
  • post_mime_type:メディアのタイプ。
  • guid:投稿した画像の場所?
wp_postmetaでは3つのレコードが作られるようだ。
  •  アイキャッチ画像と投稿の関係?
    • meta_id: auto_incrementな値。
    • post_id:上記wp_postsのpost_parentと同じ値。
    • meta_key:"_thumbnail_id"という値。
    • meta_value:画像のID。上記wp_postsのID。
  • アイキャッチ画像の情報
    • meta_id:auto_incrementな値。
    • post_id:上記wp_postsのID。
    • meta_key:"_wp_attachment_metadata"という値。
    • meta_value:画像の大きさなど配列で値が入っている。
  • アイキャッチ画像の場所?
    • meta_id:auto_incrementな値。
    • post_od:上記wp_postsのID。
    • meta_key:"_wp_attached_file"という値。
    • meta_value:wp/content/uploads以下のディレクトリ名とファイル名。
ぐぐってみるが、関係のある情報がありそうでなかったりするものだ。全てを確かめるのも面倒になってきて、手探り状態でレコードを挿入していく。wp_postmetaの_wp_attachment_metadataのレコードは必要無さげだったので無視した。

とここまできてブラウザで確認。うまく行っているようではある。wp_postmetaのレコード数が肥大化していくのが気にはなっているのだが。。。

0 件のコメント: