私はユーザーがスタイルシートを切り替えることを可能にするサイトを実装しています(視覚障害を持つ人々のためにハイコントラストバージョンを表示するために)。スイッチャーは基本的に<link>
refを適切なスタイルシートに変更するだけです。
ただし、キャッシュをオンにすると(WP SupercacheまたはW3 Total Cacheのいずれかを使用)、ページの1つのバージョンのみがキャッシュされてユーザーに表示されるため、問題が生じることがわかりました。
考えられる解決策についての考えは?
答えはかなり単純です(少なくともWP Supercacheの場合)。
$wp_super_cache_late_init = 1;
にwp-content/wp-cache-config.php
を設定することによって)<!--dynamic-cached-content-->
ディレクティブを使用します。例:
<!--dynamic-cached-content--><?php
display_high_contrast_link();
?><!--
display_high_contrast_link();
--><!--/dynamic-cached-content-->
ご覧のとおり、動的コンテンツは2回追加されました - WP Supercache FAQ から
最初のコードはページがキャッシュされたときに実行され、2番目のコードはキャッシュされたページが次の訪問者に提供されたときに実行されます。
私はW3TCを使用しているので、これらは私がそれを考え出すことができるアプローチです:
フラグメントキャッシュを使用してページのその部分を除外すると、全体としてキャッシュの有効性が低下します。
切り替えられたスタイルシートを持つページをクエリ引数で識別し、そのようなページのキャッシュを無効にします。
URLエンドポイントでスタイルシートを切り替えてページを識別し、マスクによるキャッシュを無効にします。
JavaScriptを介してスタイルシートの切り替えを実装する(実際はW3TC固有ではない)。
アイデア:スタイルをエンキューする場合は、version
に filemtime()
を使用します。以前のスタイルシートへの変更が見つかった場合、キャッシュは妨げられ、新しいスタイルシートがロードされます。