以下のような悩みを抱えた方向けの記事です。
- WordPressのプラグインStaticPressを使用している
- StaticPressで生成された静的ファイルのリンクURLが、StaticPressで設定した「静的サイト URL」に置き換わらないことがある
- SNS拡散用ボタンのリンクURLが「静的サイトURL」に置き換わらないなど
- StaticPressで生成された静的ファイルのリンクURLが、StaticPressで設定した「静的サイト URL」に置き換わらないことがある
WordPressのStaticPressの導入については以下の記事をご参照ください。
StaticPress S3を使用してS3+CloudFrontでコンテンツ配信するケースの導入例
https://it.kensan.net/it/staticpresss3.html
StaticPressを使用してEC2+CloudFrontでコンテンツ配信するケースの導入例
https://it.kensan.net/it/aws_ec2_wordpress_cloudfront.html
早速、解決方法を記載します!
解決方法
この問題の解決には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の再構築の処理が少し遅くなりそうですが、許容範囲かと思います。