WordPress のリビジョン機能を停止する方法と、コードの記述場所について考える

2013-06-05-001

WordPress の管理画面で投稿記事を書いたり修正したりしていると、編集するたびにバージョン履歴が保存されていきます。あまり必要性を感じない上、データベースの肥大化にもつながるようなので、思い切ってこのリビジョン機能を停止しました。この作業が WordPress のコアファイルの構成を知るいい勉強になったので、メモを残します。

目次

  1. 自動保存とリビジョン機能
  2. リビジョンを無効化するコード
  3. コードの記述場所が決まっている理由を考える
  4. WP_POST_REVISIONS の行方
  5. 定数の定義
  6. default-constants.php は wp-settings.php に読み込まれる
  7. そして wp-settings.php が wp-config.php へ

1. 自動保存とリビジョン機能

今回の作業に当たっては、次のサイトを参考にしました。

自動保存は、記事を編集中に一定の間隔(デフォルトでは60秒)で記事を自動的に保存してくれる機能です。一方のリビジョンは記事の編集経過、つまりバージョン履歴を管理し、必要に応じて古いバージョンの記事を復元することができる機能です。

自分の場合は管理画面で最初から最後まで記事を書くことはほぼ皆無なので、自動保存だけそのまま残し、リビジョン機能を無効化することにしました。自動保存の場合は60秒ごとに以前の自動保存された記事を上書きしていくため、データベースは肥大化しないとのことです。

2. リビジョンを無効化するコード

リビジョン機能を停止するためには、WordPress のインストールフォルダにある wp-config.php を編集し、次のコードを追加します。

define('WP_POST_REVISIONS', false);

コードを記述する場所は、ファイルの最後にある require_once(ABSPATH . 'wp-settings.php'); より前でなければいけません。実際に挿入すると、次のようになります。

if ( !defined('ABSPATH') )
	define('ABSPATH', dirname(__FILE__) . '/');

define('WP_POST_REVISIONS', false);

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

すでに生成されている過去記事のリビジョンについては、プラグイン Better Delete Revision を使って削除しました。プラグインのインストール方法や使い方は、先ほど紹介した wordpressのリビジョンと自動保存を停止、回数制限する方法 に詳しく書かれています。

3. コードの記述場所が決まっている理由を考える

作業としてはこれで終わりなのですが、なぜ require_once(ABSPATH . 'wp-settings.php'); より後に記述してはいけないのかがよく分かりません。気になったので、勉強がてら調べてみることにしました。

とっかかりにしたのは、かおりさん (@kaori10251) の記事です。

それで分かったのは、require_once(ABSPATH . 'wp-settings.php');wp-settings.php ファイルを読み込むための記述だということです。そうすると、wp-settings.php の中に WP_POST_REVISIONS に関するコードが出てきそうな気がします。でも、ファイルを開いてみても出てきませんでした。

4. WP_POST_REVISIONS の行方

それでは一体、どこに隠れているのでしょうか。いろいろ調べてみた結果、PHPXref 0.7.1: Documentation WordPress に行き着き、WP_POST_REVISIONSwp-includes フォルダの中、default-constants.php で定義されていることが分かりました。272–273行目にありました。

if ( !defined('WP_POST_REVISIONS') )
	define('WP_POST_REVISIONS', true);

5. 定数の定義

constants は「定数」という意味です。なので、ここでは if ( !defined('WP_POST_REVISIONS') ) = もし定数 WP_POST_REVISIONS が定義されていなければ、define('WP_POST_REVISIONS', true); = それを true と定義せよ、と記述されているのですね。

default-constants.php はこのほかにも、WordPress で必要になるさまざまな定数を定義しているようです。

6. default-constants.php は wp-settings.php に読み込まれる

そして、こうした定数について定義している default-constants.php は、wp-settings.php に読み込まれます。wp-settings.php の22行目に、次の記述がありました。

require( ABSPATH . WPINC . '/default-constants.php' );

7. そして wp-settings.php が wp-config.php へ

wp-settings.php は先ほど書いたように、wp-config.php に読み込まれます。つまり、wp-config.phpwp-settings.php を読み込み、wp-settings.phpdefault-constants.php を読み込むという流れになっています。

default-constants.php は 定数 WP_POST_REVISIONS が定義されていなければそれを true と定義してしまうため、リビジョン機能を無効化するには、その前に自分で define('WP_POST_REVISIONS', false); と定義しなきゃいけない、ってことなんですね。だからこそ wp-config.phprequire_once(ABSPATH . 'wp-settings.php'); よりも前に記述しなければいけない、ということです(解釈合ってますでしょうか??)。

言い換えるなら、定数は後から上書きすることができないということになります。PHP マニュアル にも解説がありました。

ここまで調べるだけでも、WordPress の構造や PHP をよく理解していない自分にはかなり長い道のりでした。もうちょっと PHP について勉強してからブログを始めた方が良かったのかな、とも思いつつ。でも分からないことを1つ1つたどって調べていくのは勉強になりますし、すごく面白いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です