Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@nanonum

bogoで表示中の言語ごとに別のテンプレートを使う

見出しテキスト程度であれば言語ファイルを使ったりbogoのウィジェットが使えるようですが、コーポレートサイト案件等でそもそも日英でコンテンツ内容自体かわかる場合などにget_locale()での振り分けを都度都度入れていくとメンテナンスが残念になりそうなのでテンプレートごと変更する方法。

英語の時だけ_enというpostfixのついたテンプレートファイルを探し、存在する場合はそっちを使うコード。

functions.php
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というファイルを作ったりしてしまうと動かないような気がしなくもないですが試していません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What is going on with this article?