WordPressの変な処理 WP_Cache
以下のコードが wp-settings.php にあります。
1 2 | if ( WP_CACHE ) WP_DEBUG ? include( WP_CONTENT_DIR . '/advanced-cache.php' ) : @include( WP_CONTENT_DIR . '/advanced-cache.php' ); |
疑問1
定数WP_CACHEは false です。なのでこのif文の条件は成立しません。
さらに、三項演算子の処理ですが、
値が 真ならば○○ 偽ならば○○ の 処理が真・偽とも同じです。
なぜこのようなコードが現存しているのか?
疑問2
定数WP_DEBUG は false ですが、多重定義されています。
過去の遺産で削除できないなら、コメントアウトすべきではないか?
WordpresCODEXに以下の記述がありました。
WordpresCODEX
関数リファレンス/WP Cache
WordPress2.5以前では、wp-config.phpにdefine(‘WP_CACHE’, true)を書いた場合のみ、wp_cache関数を使って保存されたデータは永続的に保存されました。
今ではそのようなことはなく、以下のような永続的キャッシュプラグインを使わない限り、define(‘WP_CACHE’, true)は意味がありません。WP File Cache の実装では、オブジェクトキャッシュをデータベースの読み出しからディスク/ファイルシステムに移行しています。
File-Based Caching for WordPress はWordPress2.1 – 2.3に見られたファイルベースのオブジェクトキャッシュ機構を再実装しています。
Memcached Object Cache はWordPressに対して永続的オブジェクトキャッシュのバックエンドを提供します。memcachedサーバーとPECLのmemcached拡張が必要です。
キャッシュ
The WP_CACHE setting, if true, includes the wp-content/advanced-cache.php script, when executing wp-settings.php.
1 define('WP_CACHE', true);
WordPressの暗黙の了解事項として
wp-config に定数を定義する
wp-config に定数が定義されていなかったら、それぞれの位置で再定義する
WP_CACHEは少し変わった定数で、WordpresCODEX日本語でも翻訳されていませんでした。
要するに、
昔はキャッシュ機構が実装されていた。(2.5以前)
現在はプラグインを使わなければ define(‘WP_CACHE’, true) にしても意味がない。 キャッシュ機構は実装されない。
PHPがエラーで 「advanced-cache.php」がないよ 表示する。
advanced-cache.php の詳細な説明はない。
ということのようです。
ソースだけ読んでも背景・歴史・思想はわかりません。
エラー画面を出してここに貼り付けてやろうと思い
wp-config.phpに
define(‘WP_CACHE’, true)
を追記しこの画面を表示させました。
普通に表示されます。「なぜ?」と思いよく見たら、偽の条件に「@アットマーク」があります。真にはありません。Wordpress恐るべしと考えを改めました。
ちなみに@マークを取ったらこのようになります。
PATHはマスクしてます。
あたりまえですね。