WordPressから投稿一覧をエクセルで出したく、以前も同じような投稿をしたのであるが、SQLで特に絞り込みをせずにエクセル形式でエクスポートをしてエクセルのフィルターで絞り込む事にした。
その際に各カラム(フィールド)の項目が意味するものは何なのかを調べたので備忘録も兼ねてメモを残す。
普通にphpMyAdminからエクスポートをした。「1行目にフィールド名を追加する」にチェックは入れる。
エクセルを開くとA列からW列までの23のカラムが確認できた。
各フィールドに関してWPのCodexは下記リンク。
データベース構造 – WordPress Codex 日本語版 3.6 テーブル: wp_posts
A列から順番に説明を引用していく。
・ID
投稿ID(保存順に自動採番)・post_author
投稿者のユーザID・post_date
投稿日時・post_date_gmt
投稿日時(GMT)・post_content
本文・post_title
タイトル・post_excerpt
抜粋オプション・post_status
投稿ステータス
‘publish’: 公開済み
‘pending’: ペンディング
‘draft’: 草稿
‘private’: プライベート(非公開)
‘static’:(2.0.x 以前はページ)
‘object’:
‘attachment’:
‘inherit’: 継承(添付ファイル、改訂履歴・自動保存のとき)
‘future’: 予約投稿・comment_status
コメントステータス
‘open’: 許可
‘closed’: 不許可
‘registered_only’: 登録ユーザのみ・ping_status
ピン・ステータス
‘open’: トラックバック・ピンバックを受け付ける
‘closed’: 受け付けない・post_password
閲覧パスワード・post_name
投稿スラッグ
‘{親ID}-revision(-#)’ (改訂履歴のとき)
‘{親ID}-autosave’ (自動保存のとき)・to_ping
ピン通知予定URL・pinged
ピン通知済みURL・post_modified
更新日時・post_modified_gmt
更新日時(GMT)・post_content_filtered
不明、プラグイン用途に用意されている?・post_parent
親ID
>親ページの投稿ID
>添付ファイルが属する投稿ID
>改訂履歴・自動保存のベース投稿ID・guid
URL・menu_order
ページの表示順・post_type
投稿種別
‘post’: 投稿
‘page’: ページ
‘attachment’: 添付ファイル
‘revision’: 改訂履歴・自動保存・post_mime_type
添付ファイルのとき MIMEタイプ(image/png など)・comment_count
コメント数
現在公開中の投稿だけを絞りたい場合は、
・H列(post_status)をpublish
・U列(post_type)をpost
に絞り込めばOKである。
絞り込んだ状態でエクスポートしたい場合は下記のようなSQLになる。
SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post'
投稿者ID、投稿日時、本文、タイトルだけで良ければ下記のSQL
SELECT post_author,post_date,post_content,post_title FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post'
投稿者IDをユーザー名に置き換えたい場合は、下記のようにwp_usersテーブルとJOINをする。
SELECT user_login,post_date,post_content,post_title FROM wp_posts INNER JOIN wp_users ON wp_posts.post_author = wp_users.ID WHERE post_status = 'publish' AND post_type = 'post'
最後にカテゴリー名も入れたい場合はJOINが複雑になるが下記のような感じ。
適当に作成したのでどこか間違っているかも、私の環境では動作確認済。
SELECT user_login,post_date,post_content,post_title,wp_terms.name FROM (((wp_posts INNER JOIN wp_users ON wp_posts.post_author = wp_users.ID) INNER JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_term_taxonomy ON wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id) INNER JOIN wp_terms ON wp_terms.term_id = wp_term_taxonomy.term_id WHERE post_status = 'publish' AND post_type = 'post' AND wp_term_taxonomy.taxonomy = 'category'
簡単ではあるがメモだけ残しておく。