WorePressで全投稿を取得するには、PHPからwp_get_archives関数や、get_posts関数を呼べばいいのですが、
色々カスタマイズしようとすると、(自分のスキルのなさのせいか…)コードがごちゃごちゃしてしまいます。(スマートな方法があれば教えて下さい…あるいは便利プラグインがすでにありそうですが…)
なので、自分がよく使いそうなデータを集めて、データベース上にあらかじめビュー作って置きます。
以下、WorePressが使うテーブル名のプレフィクスを”wordpress_“として説明していきます。
* * * SQL仕様 * * *
・ビューの名前は、`wordpress_view_all_contents`
・フィールドは、’投稿ID‘, ‘投稿タイトル‘, ‘投稿日時‘, ‘カテゴリID‘, ‘カテゴリ名‘, ‘URL‘
・’カテゴリ名’と’投稿日時’でソートします。
・一つの投稿が複数のカテゴリを持っている場合、カテゴリ分だけレコードが増えます。
・なんだかよくわからない(!?)カテゴリ”ブログロール”は除外します。
* * * * * * * * * * * * *
投稿は`wordpress_posts`テーブルに入っています。そのままの状態だと、未公開投稿とか、下書きとか、各種ファイル(画像ファイルなど)がごっちゃになっているので、
`post_type`が’post’かつ、`post_status`が’publish’のものを選択します。
‘カテゴリ名’は`wordpress_terms`テーブル、’カテゴリID’は`wordpress_term_relationships`テーブルに入っているので内部結合します。
‘URL‘は”WorePressのサイトアドレス” + “/?p=” + ‘投稿ID’から生成できます。
“WorePressのサイトアドレス”は、`wordpress_options`.`option_value`に入っています。
※実は`wordpress_posts`.`guid`にそのままURLが入っていますが、これは投稿した時点でのURLなので、後でドメインを変更したり、複数ドメインを使ってるとおかしくなります。そういう心配がない場合は、素直にこのフィールドをつかってやると簡単です。
以下、SQLコード
CREATE VIEW wordpress_view_all_contents AS SELECT `wordpress_posts`.`ID` AS 'id', `wordpress_posts`.`post_title` AS 'title', `wordpress_posts`.`post_date` AS 'post_date', `wordpress_terms`.`term_id` AS 'category_id', `wordpress_terms`.`name` AS 'category', CONCAT((SELECT `wordpress_options`.`option_value` FROM `wordpress_options` WHERE `wordpress_options`.`option_id` = 1), '/?p=', `wordpress_posts`.`ID`) AS 'url' FROM `wordpress_posts` INNER JOIN (`wordpress_terms` INNER JOIN `wordpress_term_relationships` ON `wordpress_terms`.`term_id` = `wordpress_term_relationships`.`term_taxonomy_id`) ON `wordpress_posts`.`ID` = `wordpress_term_relationships`.`object_id` WHERE `post_type` = 'post' AND `post_status` = 'publish' AND `wordpress_terms`.`name` <> 'ブログロール' ORDER BY `category`,`post_date`;
これをデータベースクライアント(MySQLクライアントや、phpMyAdminなど)から実行すると`wordpress_view_all_contents`ビューができます。こんなの↓