見出しテキスト程度であれば言語ファイルを使ったりbogoのウィジェットが使えるようですが、コーポレートサイト案件等でそもそも日英でコンテンツ内容自体かわかる場合などにget_locale()
での振り分けを都度都度入れていくとメンテナンスが残念になりそうなのでテンプレートごと変更する方法。
英語の時だけ_enというpostfixのついたテンプレートファイルを探し、存在する場合はそっちを使うコード。
function select_locale_template($template){
if(get_locale() == 'en_US'){
$locale_template = dirname( __FILE__ ) . '/' . basename($template, '.php') . '_en.php';
if(file_exists($locale_template)){
$template = $locale_template;
}
}
return $template;
}
add_filter('index_template', 'select_locale_template');
add_filter('404_template', 'select_locale_template');
add_filter('archive_template', 'select_locale_template');
add_filter('author_template', 'select_locale_template');
add_filter('category_template', 'select_locale_template');
add_filter('tag_template', 'select_locale_template');
add_filter('taxonomy_template', 'select_locale_template');
add_filter('date_template', 'select_locale_template');
add_filter('home_template', 'select_locale_template');
add_filter('front_page_template', 'select_locale_template');
add_filter('page_template', 'select_locale_template');
add_filter('paged_template', 'select_locale_template');
add_filter('search_template', 'select_locale_template');
add_filter('single_template', 'select_locale_template');
add_filter('text_template', 'select_locale_template');
add_filter('plain_template', 'select_locale_template');
add_filter('text_plain_template', 'select_locale_template');
add_filter('attachment_template', 'select_locale_template');
add_filter('comments_popup', 'select_locale_template');
add_filter('home_template', 'select_locale_template');
ずらっと並んだadd_filterは階層のフィルターとのことで必要なもののみで問題ないかと思います、詳細は以下。
WordPress テンプレートシステムでは階層にフィルターを適用できます。get_query_template() /en 関数内にあるフィルターはファイル名 "{$type}_template" です。このとき $type は階層内の拡張子 .php なしのファイル名。
テンプレート階層 - WordPress Codex 日本語版
カスタム投稿の場合の対応については未着手。
そもそもファイル:wp-template-hierarchy.jpgで振り分けできても良さそうなんですが見つかりませんでした。
あと別途ページテンプレートとして_en.phpというファイルを作ったりしてしまうと動かないような気がしなくもないですが試していません。