WordPressの投稿記事は、MySQL(MariaDB)にどうやって格納されているのでしょう。
mysqlコマンドを使ってデータベースを確認してみます。
$ mysql -uユーザ名 -p
パスワードを入力すれば、以下のようなプロンプトが表示されます。
mysql>
管理されているデータベースを表示してみましょう。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | wp | +--------------------+ 4 rows in set (0.01 sec)
この例の場合、wpというのがワードプレス用のデータベースです。
次にwpにあるテーブルを確認してみます。
mysql> use wp; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-----------------------+ | Tables_in_wp | +-----------------------+ | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_term_relationships | | wp_term_taxonomy | | wp_termmeta | | wp_terms | | wp_usermeta | | wp_users | +-----------------------+ 12 rows in set (0.00 sec)
投稿記事のテーブルはwp_postsです。
どのようなフィールドがあるか見てみましょう。
(右の方は表示をカットしています)
mysql> show columns from wp_posts; +-----------------------+---------------------+------+-----+-(右方省略) | Field | Type | Null | Key | +-----------------------+---------------------+------+-----+- | ID | bigint(20) unsigned | NO | PRI | | post_author | bigint(20) unsigned | NO | MUL | | post_date | datetime | NO | | | post_date_gmt | datetime | NO | | | post_content | longtext | NO | | | post_title | text | NO | | | post_excerpt | text | NO | | | post_status | varchar(20) | NO | | | comment_status | varchar(20) | NO | | | ping_status | varchar(20) | NO | | | post_password | varchar(20) | NO | | | post_name | varchar(200) | NO | MUL | | to_ping | text | NO | | | pinged | text | NO | | | post_modified | datetime | NO | | | post_modified_gmt | datetime | NO | | | post_content_filtered | longtext | NO | | | post_parent | bigint(20) unsigned | NO | MUL | | guid | varchar(255) | NO | | | menu_order | int(11) | NO | | | post_type | varchar(20) | NO | MUL | | post_mime_type | varchar(100) | NO | | | comment_count | bigint(20) | NO | | +-----------------------+---------------------+------+-----+- 23 rows in set (0.00 sec)
さあ、投稿記事の一覧を表示してみます。
SQLのselect文を使います。
post_titleが投稿記事のタイトルっぽいので、select文でpost_titleを指定します。
mysql> select post_title from wp_posts; +------------------------------------------------------+ | post_title | +------------------------------------------------------+ | Debian8+MariaDB+Apache2+WordPress | | サンプルページ | | 画像編集ソフト GIMP | | ホーム | | | | 火曜のよるはダメ恋だ | | ブログ(WordPress)をバックアップ | | crontabで自動バックアップ | | 自動下書き | | Debian8+MariaDB+Apache2+WordPress | | 画像編集ソフト GIMP | | 火曜のよるはダメ恋だ | | ブログ(WordPress)をバックアップ | | crontabで自動バックアップ | | ストリームエディタ | | ストリームエディタ | | ストリームエディタ | | ストリームエディタ | | ストリームエディタ | | linuxでプログラムのインストール | | linuxでプログラムのインストール | | linuxでプログラムのインストール | | ソースからビルド、インストール | | linuxでプログラムをソースからビルド、インストール | | ソースからビルド、インストール | | ソースからビルド、インストール | | マニュアル(man)のセクション番号 | | マニュアル(man)のセクション番号 | | マニュアル(man)の素材(テキスト)はどこに? | | マニュアル(man)の素材(テキスト)はどこに? | | 花文字コマンド | | 花文字コマンド | | 花文字コマンド | | マニュアル(man)の素材(テキスト)はどこに? | | マニュアル(man)のセクション番号 | | ソースからビルド、インストール | | ソースからビルド、インストール | | linuxでプログラムのインストール | | ストリームエディタ | | crontabで自動バックアップ | | crontabで自動バックアップ | | headコマンド | | headコマンド | | headコマンド | | headコマンド | | /usr/src/linuxの謎 | | /usr/src/linuxの謎 | | sedコマンドをheadの代わりに使う | | sedコマンドをheadの代わりに使う | +------------------------------------------------------+ 49 rows in set (0.00 sec)
ん!?どうしたことでしょう。タイトルが重複して表示されました。
WordPressの便利な履歴保存機能である、リビジョン機能が働いているからです。
select文で投稿記事のステータスも一緒に抽出してみましょう。
mysql> select post_status,post_title from wp_posts; +-------------+--------------------------------------------------+ | post_status | post_title | +-------------+--------------------------------------------------+ | publish | Debian8+MariaDB+Apache2+WordPress | | trash | サンプルページ | | publish | 画像編集ソフト GIMP | | draft | ホーム | | draft | | | publish | 火曜のよるはダメ恋だ | | publish | ブログ(WordPress)をバックアップ | | publish | crontabで自動バックアップ | | auto-draft | 自動下書き | | inherit | Debian8+MariaDB+Apache2+WordPress | | inherit | 画像編集ソフト GIMP | | inherit | 火曜のよるはダメ恋だ | | inherit | ブログ(WordPress)をバックアップ | | inherit | crontabで自動バックアップ | | publish | ストリームエディタ | | inherit | ストリームエディタ | | inherit | ストリームエディタ | | inherit | ストリームエディタ | | inherit | ストリームエディタ | | publish | linuxでプログラムのインストール | | inherit | linuxでプログラムのインストール | | inherit | linuxでプログラムのインストール | | publish | ソースからビルド、インストール | | inherit | linuxでプログラムをソースからビルド、インストール| | inherit | ソースからビルド、インストール | | inherit | ソースからビルド、インストール | | publish | マニュアル(man)のセクション番号 | | inherit | マニュアル(man)のセクション番号 | | publish | マニュアル(man)の素材(テキスト)はどこに? | | inherit | マニュアル(man)の素材(テキスト)はどこに? | | publish | 花文字コマンド | | inherit | 花文字コマンド | | inherit | 花文字コマンド | | inherit | マニュアル(man)の素材(テキスト)はどこに? | | inherit | マニュアル(man)のセクション番号 | | inherit | ソースからビルド、インストール | | inherit | ソースからビルド、インストール | | inherit | linuxでプログラムのインストール | | inherit | ストリームエディタ | | inherit | crontabで自動バックアップ | | inherit | crontabで自動バックアップ | | publish | headコマンド | | inherit | headコマンド | | inherit | headコマンド | | inherit | headコマンド | | publish | /usr/src/linuxの謎 | | inherit | /usr/src/linuxの謎 | | publish | sedコマンドをheadの代わりに使う | | inherit | sedコマンドをheadの代わりに使う | +-------------+--------------------------------------------------+ 49 rows in set (0.00 sec)
修正前の投稿記事はinheritというスタータスがつけられているようです。
修正後の最新である投稿記事はpublishがついています。
実験的にinherit状態のレコードだけ削除しようと思います。
whereでinherit状態のスタータスのみ指定して、delete文を使います。
mysql> delete from wp_posts where post_status="inherit"; Query OK, 31 rows affected (0.00 sec) mysql> select post_status,post_title from wp_posts; +-------------+------------------------------------------------------------+ | post_status | post_title | +-------------+------------------------------------------------------------+ | publish | Debian8+MariaDB+Apache2+WordPress | | trash | サンプルページ | | publish | 画像編集ソフト GIMP | | draft | ホーム | | draft | | | publish | 火曜のよるはダメ恋だ | | publish | ブログ(WordPress)をバックアップ | | publish | crontabで自動バックアップ | | auto-draft | 自動下書き | | publish | ストリームエディタ | | publish | linuxでプログラムのインストール | | publish | ソースからビルド、インストール | | publish | マニュアル(man)のセクション番号 | | publish | マニュアル(man)の素材(テキスト)はどこに? | | publish | 花文字コマンド | | publish | headコマンド | | publish | /usr/src/linuxの謎 | | publish | sedコマンドをheadの代わりに使う | +-------------+------------------------------------------------------------+ 18 rows in set (0.00 sec)
すっきりしました。
(実験で消しただけですので、十分な確認をせずにデータベースを操作消してはいけません。操作は自己責任で)
コメント