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;