WordPressで任意の文字コードでページを出力する方法

Wordpressの文字コードはUTF-8ですが、とある案件でとある事情により、特定のページだけをShift-JISで出力しなければいけない状況になり、解決方法を見つけたのでメモ。

テンプレートになるphpファイルの頭に、

<?php
header("Content-Type: text/html; charset=Shift_JIS");
ob_start();
?>

phpの最後に、

<?php
$out = ob_get_clean();
$out = mb_convert_kana($out, "rak", "UTF-8");
$out = mb_convert_encoding($out, "SJIS", "UTF-8");
echo $out;
?>

と表記。つまりこれらのphpで変換する部分を囲めばいいわけだ。

元記事では携帯用に出力するためmb_convert_kanaがありますが、僕の場合は今回は不要、あと上記のままだとmeta charsetがUTF-8のまま出力されてしまうので、下記のようなコードに。ちなみに、スラッグがcontactの固定ページにだけ適用したかったので、page-contact.phpというテンプレートを用意し、そこに記述しました。これで他のページには影響をださず出力できます。

header( 'Content-Type: text/html; charset=Shift_JIS' );
ob_start();

// ここにWordpressのループとか

$out = ob_get_clean();
$out = mb_convert_encoding( $out, 'SJIS', 'UTF-8' );
$out = str_replace( 'UTF-8', 'Shift-JIS', $out );
echo $out;