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

[紹介元] WordPressタグが付けられた新着投稿 – Qiita bogoで表示中の言語ごとに別のテンプレートを使う

  • コメント

    1. 匿名希望
      2017/08/19(土) 03:29:02

      オンデマンド?でクリアファイルつくってみよかな~~とおもったけど暇なときにテンプレートでもDLしてみよう😭猿だからできるかは不明だが😭

    2. 匿名希望
      2017/08/19(土) 03:29:02

      テンプレートの解決で型が成果物として出来た状態なのは当然として、構造体のテンプレート特殊化ではなくconstexpr関数のオーバーロードで分岐させたるようにメタ関数を書いた場合、この関数は実行ファイルのどこかに居るんだろうか

    3. 匿名希望
      2017/08/19(土) 03:29:02

      ふ〜む。最近はJavaScriptのラッパー言語としてTypeScriptっていうのもあるのね。
      コンパイルするとJSファイルが出力されるみたいで、大規模開発向けに静的型判定とかテンプレートとかも使えるみたいだから、他言語から移行するならこっち調べてった方が良さそうね…

    4. 匿名希望
      2017/08/19(土) 03:29:02

      rFactorのスキンテンプレートってiRより複雑じゃないけどファイルの扱いがめんどい

    5. 匿名希望
      2017/08/19(土) 03:29:02

      このファイル入れてね!って入ってる名称のテンプレートファイルがないしなんなのこれほんとに

    記事に戻る

関連記事