WordPressをCDN運用する際に、
「WordPressアドレス」→ オリジンサーバーのURL
「サイトアドレス」→ CDNのURL
とした場合、
公開URLの諸々のパスが、オリジンサーバーを向いてしまう問題が発生することがあります。

functions.php に追記し、URLを置換する記述。
「wp_head」と「wp_footer」を対象。
/**
* wp_headとwp_footerの出力URLを置換
*/
// 開始処理
$reverse_cdn_start = function() {
ob_start(function($payload) {
// 置換前のURL
$search = 'https://オリジンサーバのURL';
// 置換後のURL
$replace = 'https://CDNの公開URL';
return str_replace($search, $replace, $payload);
});
};
// 終了処理
$reverse_cdn_end = function() {
if (ob_get_level() > 0) {
ob_end_flush();
}
};
// wp_head に適用
add_action('wp_head', $reverse_cdn_start, 0);
add_action('wp_head', $reverse_cdn_end, 999);
// wp_footer に適用
add_action('wp_footer', $reverse_cdn_start, 0);
add_action('wp_footer', $reverse_cdn_end, 999);
アップロードファイルのディレクトリ変更。
※設定以降にアップロード先のディレクトリを変更するもので、
既にアップロードされているURLを置換するには、別の方法が必要です。
/**
* アップロードディレクトリのURLを置換
*/
add_filter('upload_dir', function($uploads) {
// 変換元のURL
$search = 'https://オリジンサーバのURL';
// 変換後のURL
$replace = 'https://CDNの公開URL';
// url と baseurl の両方を置換
$uploads['url'] = str_replace($search, $replace, $uploads['url']);
$uploads['baseurl'] = str_replace($search, $replace, $uploads['baseurl']);
return $uploads;
});







