WordPressのプラグインStaticPressで不要な静的ファイルが生成されないようにする方法を記載します。
WordPressのStaticPressの導入については以下の記事をご参照ください!
StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例
StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例
本記事はStaticPressを導入後に、不要な静的ファイルが出力されないようにする方法を記載します。
不要な静的ファイルとは配信サーバに不要なページであるWordPressの管理画面などのHTMLを指します。
不要なファイルを生成されないようにすることで、以下のメリットがあります。
ディスク容量の削減
StaticPressでの再構築時間の短縮
配信に不要なページについて
配信サーバに不要なページについて、具体的には以下のフォルダを不要と考えています。
- 配信に不要なフォルダ
- /wp-admin/*
- 管理画面。配信不要ページ。
- /wp-content/plugins/*
- pluginを管理しているフォルダ。配信時にプラグインは不要(動かさない)。
- /wp-includes/*
- API、クラス、関数などのプログラムファイルを管理しているフォルダ。配信時は不要
- /wp-json/*
- WordPressのAPIレスポンスを保存するフォルダ。配信サーバ時は不要。
- /author/*
- 投稿者ごとのページ。必要な場合は残す。
- /wp-admin/*
なぜ対応が必要なのか
改めて、不要なページを出力しないようにする理由について、記載していきます。
配信に不要なページについて、静的HTMLを出力しないようにすることで、以下のメリットがあります。
<WordPressサーバ(EC2)からみたメリット>
メリット1:EC2ディスク容量の節約できる
メリット2:再構築(HTML生成)時間の短縮
<配信サーバ(S3)からみたメリット>
※WordPressサーバ(EC2)で配信している場合は対象外です。配信サーバにS3を使用している場合、以下のようになります。
WordPressサーバで不要なページについては静的ファイル(HTMLファイル)の生成対象外となるため、StaticPress S3でS3に同期(コピー)対象から不要なページが含まれないようになります。これにより以下のメリットがあります
メリット1:S3 APIの節約に役立ちます
メリット2:S3 ストレージの節約に役立ちます
それでは、不要な静的ファイルが生成されないようにする方法を記載します。
不要な静的ファイルが生成されないようにする方法
生成対象外とする対象のフォルダによって対応方法が異なります。
まずは、wp-admin、wp-includesフォルダを除外する方法を記載します。
wp-admin、wp-includesを静的ファイル生成対象外とする
修正対象ソース:/wp-content/plugins/staticpress/includes/class-static_press.php
869行目辺りを以下のように修正する
//修正後ソース
//869行目辺り
private function static_files_url($url_type = 'static_file'){
$urls = array();
$static_files_filter = apply_filters('StaticPress::static_files_filter', $this->static_files_ext);
foreach ($static_files_filter as &$file_ext) {
$file_ext = '*.'.$file_ext;
}
$static_files = array_merge(
$this->scan_file(trailingslashit(ABSPATH), '{'.implode(',',$static_files_filter).'}', false),
//$this->scan_file(trailingslashit(ABSPATH).'wp-admin/', '{'.implode(',',$static_files_filter).'}', true),←コメントアウト
//$this->scan_file(trailingslashit(ABSPATH).'wp-includes/', '{'.implode(',',$static_files_filter).'}', true),←コメントアウト
$this->scan_file(trailingslashit(WP_CONTENT_DIR), '{'.implode(',',$static_files_filter).'}', true)
);
次に、以下の静的ファイルを生成されないように対応します。
・/wp-content/plugins/*
・/wp-json/*
・/author/*
/wp-content/plugins/*と/wp-json/*と/author/*を静的ファイル生成対象外とする
修正対象ソース:/wp-content/plugins/staticpress/plugin.php
//以下のソースを追加
add_action('StaticPress::file_put', 'static_rm', 1, 2);
function static_rm($file_dest, $url){
if(strstr($file_dest, '/author/')
or strstr($file_dest, '/wp-content/plugins/')
or strstr($file_dest, '/wp-json/')){
unlink($file_dest);
}
}
動作確認
以下の対応をした後にStaticPressで再構築をします。
WordPressサーバの静的ファイル出力フォルダをカラにする
(S3を使用している場合)S3にコピーされたファイルを全て削除する
StaticPressで再構築後に以下の確認ができればOKです。
WordPressサーバの静的ファイル出力フォルダにファイルが出力されている
配信用URLにアクセスし、サイトが正常に表示される