以下のような悩みを抱えた方向けの記事です。
- WordPressのプラグインStaticPressを使用している
- StaticPressで生成された静的ファイルのリンクURLが、StaticPressで設定した「静的サイト URL」に置き換わらないことがある
- SNS拡散用ボタンのリンクURLが「静的サイトURL」に置き換わらないなど
- StaticPressで生成された静的ファイルのリンクURLが、StaticPressで設定した「静的サイト 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の再構築の処理が少し遅くなりそうですが、許容範囲かと思います。