【PHP・WordPress】HTTPヘッダの削除・追加に便利なheader_register_callback()関数

 2024年9月17日

WordPress に限らず、PHP で HTTP ヘッダを整形・編集できる関数「header_register_callback」について触れておきます。

例えば WordPress で HTTP ヘッダを編集する場合、wp_headers フィルターフックを使って以下のようなコードを書くことがありますが、

add_filter('wp_headers', 'filter_http_headers', 999);
function filter_http_headers($headers) {
	
	// Remove ->  X-Pingback
	unset($headers['X-Pingback']);
	
	return $headers;
}Code language: PHP (php)

この方法では、一部のプラグインが特定条件下で出力する HTTP ヘッダは削除・編集できません。

そういった場合は、より強力な HTTP ヘッダの操作方法である header_register_callback 関数を使う手があります。

header_register_callback(function (){
	
	// Remove ->  X-Pingback
	header_remove('X-Pingback');
	
	// Remove -> "Vary:Accept-Encoding,User-Agent,Cookie" by W3TC (Disk Advanced: Cache missed.)
	header_remove('Vary');
	
	// Vary ヘッダは常に Accept-Encoding, User-Agent
	header('Vary: Accept-Encoding, User-Agent');
});
Code language: JavaScript (javascript)

例えば、WordPress のプラグイン「W3 Total Cache」でユーザーグループ機能や gzip / Brotli 圧縮 ON 時に自動出力される Vary ヘッダは、WordPress の wp_headers フィルターフックでは削除できないものの、header_register_callback 関数であれば削除できます。

もちろん W3TC 自体は、必要があって Vary ヘッダに Cookie を出力していますから、先のコードを脳死でコピペするのは如何なものかと思いますが。

事情があってお困りの方は参考にしてみてください。

公式情報:

Hatena Pocket Line

コメントを記入