CDNでWordPress利用の際の、パス置換設定

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;
});