[WordPress] 記事のデーターベース上での管理方法と ID について

格納されるテーブル

投稿記事は MySql のテーブル「wp_posts」に保管される。
このテーブルは ”post” が示すとおり、サーバーに「ポスト」したもの全てが格納される。投稿記事以外に、固定ページ・メディア・カスタムメニューなど様々なデータを保管している。

wp_posts テーブルの主なフィールド

フィールド内容
ID一意に識別する連番で、作成時に自動採番される
データ型は “ bigint(20) unsigned ”
1 ~ 18,446,744,073,709,551,615 の値を保存でき、実用上は無限に使える
post_date投稿日時
post_content本文
post_titleタイトル
post_status投稿ステータス(投稿の状況で変化する)
post_name通常記事のとき:投稿のスラッグ
改訂履歴のとき:'{親ID}-revision(-#)’
自動保存のとき:'{親ID}-autosave’
119-autosave-v1 … セーブしないと次回の呼び出し時に消える
post_modified更新日時

新しい記事を作成する時に、新しいレコードが生成され ID が採番される。なお、画像などを追加する時にも新しく ID が採番されるので、必ずしも記事の連番にはならない

なお、記事などポストしたものを削除しても ID は再利用されず、次の採番では次の番号がとられる。つまり欠番になる

レコードの更新要領

「新規追加」をクリックした直後

IDが採番され、下記レコードが新規追加される。

フィールド設定値
ID新しく自動採番した値
post_dateその時の日時
post_content空白
post_title自動下書き
post_statusauto-draft
post_name空白
post_modified‘0000-00-00 00:00:00’

この直後に他の画面に移る(記事作成を中断する)と、このレコードは残ったままになる。
なお、次回の新規記事作成時に7日経過後のものは削除されるので、永遠に残ることはない。
※ ただし、ここで採番された ID が消えるることになり、ID は欠番になる

記事を入力中(自動保存)

フィールド設定値
ID(変わらず)
post_date自動保存時の日時
post_content入力した本文
post_title入力したタイトル
post_statusdraft
post_name入力したスラッグ
post_modified(変わらず)

post_status が ‘draft‘ (下書き)にセットされ、入力内容が上書きされる。

記事を公開した直後

フィールド名設定値
ID(変わらず)
post_dateその時の日時
post_content(変わらず)
post_title(変わらず)
post_statuspublish
post_name入力したスラッグ
post_modifiedその時の日時

post_status が ‘publish‘ (公開)に変化し、入力内容が上書きされる。

記事を更新した時

フィールド名設定値
ID(変わらず)
post_date(変わらず)
post_content入力した本文
post_title入力したタイトル
post_status(変わらず)
post_name入力したスラッグ
post_modifiedその時の日時

状態などは変わらず、入力内容と更新日時が上書きされる。

リビジョン管理の要領

記事を更新した時、自動的に改訂履歴を作成する機能。

データーベースの更新

本記事のレコードを上書き更新すると同時に、下記の改訂履歴レコードを新規追加する。

フィールド名設定値
ID新しく自動採番した値
post_date本記事の内容
post_content本記事の内容
post_title本記事の内容
post_statusinherit
post_name{本ID}-revision-v1
post_modified本記事の内容

リビジョンのレコードは、更新の度に無限に作成される。(デフォルト)

リビジョン作成の条件

記事を更新した時

以下のいずれかのタイミングで生成される。
・手動で「公開」した時
・手動で「下書き保存」した時
・「プレビュー」した時

記事が変更されている事

記事が変更されている場合
(変更なしで更新・プレビューしても心リビジョンは発生しない)

自動保存の要領

記事の編集中に一定時間がたつと、自動的に保存する機能。
自動保存用のレコードが作成されるが、新しいリビジョンは発生しない。常に上書き保存されるので、データベースを圧迫させる事はない。

新規作成(下書き)の場合

新しい記事を作成中に自動保存が働いた時、前述の「自動下書き」レコードに上書きされる。
(= ID は変わらず)

公開した記事の更新の場合

公開記事を編集している途中に自動保存が働いた時、以下の要領でデーターベースが更新される。

最初の自動保存

自動保存用のレコードが新規追加される
(= ID が新しく採番される)

フィールド名設定値
ID新しく自動採番した値
post_dateその時の日時
post_content入力した本文
post_title入力したタイトル
post_statusinherit
post_name{本ID}-autosave-v1
post_modified‘0000-00-00 00:00:00’

2回目以降の自動保存

上記のレコードに上書きされる
(= ID はかわらず)

フィールド名設定値
ID(変わらず)
post_dateその時の日時
post_content入力した本文
post_title入力したタイトル
post_status(変わらず)
post_name(変わらず)
post_modified(変わらず)

記事を更新した時

前述のリビジョン管理の処理が行われる。
その後、上記の自動保存用レコードは削除される
(= ID は欠番になる

自動保存が働く条件

更新間隔

60秒(デフォルト)

記事が変更されている事

エディタで何も変更していなければ、60秒たっても自動保存はされない。

なお実験の結果、エディタによって変更有無の判断が違う模様。
・クラッシックエディタ : 入力しているブロックからカーソルが抜けた時に判定される
・ブロックエディタ : ブロックから抜けなくてもOK

自動保存は活用されるのか?

記事の修正中に、他の画面に移ろうとすると確認メッセージが表示される。

このサイトを離れますか?
行った変更が保存されない可能性があります。
(Chromeの場合)

これを無視して移動した時、自動保存したデータは活用されるのか? 実験結果は以下の通り。
※ WordPress 5.2.2 で実験

「下書き」記事の場合

期待通りに活用される。
次回、下書き記事を呼び出すと、最後に自動保存された内容になっている。

「公開」記事の場合

こちらは、活用されない。
自動保存はされるが、次回の読出し時に破棄される。(自動保存レコードが削除される)
⇒ 従って修正した後は、必ず「更新」が必要。

ID についての考察

記事の一連番号ではない

記事以外にメディア(画像)なども含めて採番されるので、投稿した順の記事番号ではない。
また、レビジョン管理や自動保存の際にも採番され、中には自動で削除されるものもある。さらに記事や画像を削除すると、その ID は消えてしまう。ID は必ず欠番がある

そもそも記事の連番は必要か?

現状で WordPress には記事の連番は存在しない。あったとしても、利用できる場面は見当たらない。記事の連番があったほうがいいという気持ちは分からないでもないが、それを ID に求めてはいけない。ID とはそういうものだと割り切る事が寛容。

コメント

タイトルとURLをコピーしました