WordPress の投稿記事一覧をデータベースから取得してファイルに出力する方法
WordPress の投稿記事リストの一覧をデータ抽出するために、SQL を発行してこれらの項目を出力した一覧を取得します。
- ID
- 公開日
- 最終更新日
- 記事 URL
- 記事タイトル
URL リストがあれば、Google Analytics からエクスポートしたデータと突合させることも可能です。Analytics 上では得られない、アクセス数0のページだって見つけられます。他にも毎月の記事投稿数のチェックや月々のアクセス数の変化など、1つのファイルにまとめておくことで様々な情報が得られます。
投稿記事のリストは WordPress のデータが格納されている MySQL のデータベースから取得します。
MySQL のデータベースから一覧を抽出する方法
まずはデータベースサーバーの phpMyAdmin にアクセスします。各レンタルサーバーによってアクセス方法が異なるので、phpMyAdmin の開き方については割愛させていただきます。
なおバージョンによって画面デザインが少し異なりますが、手順はほぼ同じです。ここでは MySQL 5.7 の画面を用いて説明していきます。
phpMyAdmin での操作
phpMyAdmin へログイン後、左側のツリーから対象のデータベースを選択。WordPress の情報が入っているデータベースを開きます。画面上にデータが格納されているテーブル一覧が表示されるので、画面上部にある [SQL] のタブへ進みます。
SQL とは、データベースに格納されているデータを抽出するためのプログラムです。あまり詳しくなければ、遷移した入力画面で次の SQL をそのまま貼り付けて実行してください。これで対象の記事リストが抽出されます。
select ID, post_date, post_modified, concat('/', post_name, '/') as post_name, post_title from wp_posts where post_status = 'publish' and post_type in ('post', 'page') order by post_date
パーマリンクの指定方法により、5行目のコードを変更しないと適切な URL が取得できません。例えば URL が「?p=123」のようになっている場合など、利用しているパーマリンクの形式に合わせて、次のように内容を変更してください。
パーマリンク形式 | SQL内容 |
---|---|
/%postname%/ | concat(‘/’, post_name, ‘/’) as post_name, |
/?p=123 | concat(‘?p=’, ID) as post_name, |
/archives/123 | concat(‘/archives/’, ID) as post_name, |
上記 SQL は Google Analytics との比較を目的としているので、URL の情報にドメイン部分を含んでいません。もしドメインから必要であれば、concat 関数の最初の引数にドメイン情報を加えてあげることで、フルパスでの URL が取得できます。
concat('https://webllica.com/', post_name, '/') as post_name,
抽出データをエクスポート
発行した SQL に問題が無ければ、抽出結果が次のように一覧表示されます。ここでもしエラーになったら、発行した SQL の構文を見直してください。
抽出データは画面上に表示されているだけなので、ここからファイルへ落とす作業を行います。そのまま画面の下までいくとクエリ結果操作のメニュー群があるので、そこから [エクスポート] へ進みます。
エクスポート時のオプションとして、ファイルのフォーマットや文字コードを指定できます。旧バージョンには直接 Excel 形式でエクスポートできる機能があったのですが、バージョン 5.7 では廃止されています。
フォーマットは一番使い勝手の良い [CSV] を選択し、エンコーディングの変換は [なし] のまま実行するのがおすすめです。
出力したファイルを Excel で表示する
一般的な CSV ファイルは、そのままダブルクリックすれば Excel が起動します。しかし WordPress のデータは文字コードが UTF-8 なので、文字化けしてしまいます。
そんな時は CSV ファイルを一度開いて、BOM 付きのテキストファイルとして上書き保存すれば Excel で閲覧できるようになります。詳しくは次の記事をご覧ください。
以上、WordPress の投稿記事一覧をデータベースから取得する方法でした。