StaticPressでドメインが静的サイト URLに置換されない時の対処法(WordPress)

以下のような悩みを抱えた方向けの記事です。

  • WordPressのプラグインStaticPressを使用している
    • StaticPressで生成された静的ファイルのリンクURLが、StaticPressで設定した「静的サイト URL」に置き換わらないことがある
      • SNS拡散用ボタンのリンクURLが「静的サイトURL」に置き換わらないなど

WordPressのStaticPressの導入については以下の記事をご参照ください。

StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例

【日本語URL対応版】WordPressのコンテンツを StaticPress S3プラグインを使用して配信する方法
WordPressコンテンツをStaticPressS3を使用してS3+CloudFrontで配信する方法を記載。 コピペで環境構築できます。S3+CloudFrontで配信することで「 低コストで安定したサイト運用ができる」「高速なサイトを構築できる」「セキュリティ的に安全」というメリットがあります。

StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例

StaticPressを使ってEC2上のWordPressコンテンツをCloudFront経由で簡単に配信する方法
WordPressのコンテンツを静的ページ化し、CloudFrontで配信できるようにします。静的ページ化するところはWordPressのプラグインStaticPressを使用します。CloudFrontのキャッシュクリアはClear CloudFront Cacheプラグインを使用します

早速、解決方法を記載します!

解決方法

この問題の解決にはStaticPressのソースコードを修正が必要となります。

以下のソースコード修正を行います。

修正ファイル:staticpress/includes/class-static_press.php



                // 修正前ソース
                if ( $home_url !== $static_url ) {
                        $pattern  = array(
                                '# (href|src|action)="'.preg_quote($home_url).'([^"]*)"#ism',
                                "# (href|src|action)='".preg_quote($home_url)."([^']*)'#ism",
                        );
                        $content  = preg_replace($pattern, ' $1="$2"', $content);
                }


                // 修正後ソース
                if ( $home_url !== $static_url ) {
                        $pattern  = array(
                                '# (href|src|action)="'.preg_quote($home_url).'([^"]*)"#ism',
                                "# (href|src|action)='".preg_quote($home_url)."([^']*)'#ism",
                        );
                        $content  = preg_replace($pattern, ' $1="$2"', $content);
                        $content  = preg_replace('/{WordPressのドメイン}/', '{静的ファイルドメイン}', $content); // ここを追加
                }

上記修正を行います。「WordPressのドメイン」「静的ファイルドメイン」の部分はそれぞれ以下の値を設定してください。

WordPressのドメイン:WordPressの管理画面が動いているドメイン

静的ファイルドメイン:静的ファイルを配信しているサーバのドメイン

なぜ置換されないのか

SNS拡散用ボタンのリンクURLなどは、URLエンコードされていることが原因で、静的ファイルURLの置換対象とならず、置換されない(WordPressの管理画面が動いているドメインのままとなる)ようです。

上記対応ではURLエンコードされているリンクURLも置換対象となるため、SSN拡散用ボタンのリンクURLも正常に動作するようになります。

まとめ

簡単なソース修正で、URLが置き換わるようになったと思います。

今回、URLを書き換える処理を追加したことで、StaticPressの再構築の処理が少し遅くなりそうですが、許容範囲かと思います。