サポート » 使い方全般 » 多言語サイトで特定の言語の場合にパーマリンク構造を変更したい

  • 解決済 kurudrive

    (@kurudrive)


    毎度お世話になります。

    現在多言語サイトを作成しており、日本語の場合は

    http://sample.com/aaa/bbb/?lang=ja

    というように「?lang=ja」というパラメーターを付けている状態なのですが、
    諸事情によりパラメーター無しで

    http://sample.com/ja/aaa/bbb/

    というようにドメインの後に /ja/を挿入するようなURL構造で運用する必要が出て来たのですが、カスタム投稿タイプ・カスタム分類など多数使用していることもあり何かスマートに実現出来る方法がないか探っています。

    何卒お力添えいただけると幸いです m(TーT)m

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • $_SERVER[‘REQUEST_URI’]をWordPressがWPのQueryが読み込む前に書き換えればいいと思います

    ざっくり分けて、二つの作業があります。

    1. get_permalink等パーマリンク出力時にフィルターして、http://sample.com/ja/aaa/bbb/ というリンクを出力できるようにする
    2. http://sample.com/ja/aaa/bbb/ を内部で解釈出来るようにする

    の二つの重たーい作業があります。

    get_permalink等パーマリンク出力時にフィルターして、http://sample.com/ja/aaa/bbb/ というリンクを出力できるようにする

    パーマリンクの出力は、なんてことはないです。現在のロケールを取得し、その値に応じて、URLを書き換えるだけです。home_url を書き換えるのが一番手軽です。パーマリンクの出力時にはこの関数が噛んでいるので。ただし、それだと仕様上面倒くさいことも想定されたりするので、その場合は、post_link, page_link, post_type_link等に対し、個別に対応していく必要があります。

    また、post_link, page_link 等については、プレビュー機能などもありますので、そこでURLの変更がかからないように手を打つ必要があります。

    とりあえずここまで。

    http://sample.com/ja/aaa/bbb/ を内部で解釈出来るようにする

    ざっくりとしたことを書きますが、rewrite_rules_array というフィルターが WP_Rewrite::rewirte_rules に存在します。ここのフィルターですべてのリライトルールが入った配列に対してフィルター出来るので、それを用いて、各言語ごとのスラッグを足したリライトルールを追加してしまうのが、一番簡単かなとは思います。

    'page/?([0-9]{1,})/?$' => 'index.php?&paged=$matches[1]'

    みたいなルールがあった場合、

    'ja/page/?([0-9]{1,})/?$' => 'index.php?&paged=$matches[1]&lang=ja'

    みたいなルールを追加してしまうと言うことです。
    リライトルール自体は確か前方一致だったはずなので、既存のルールの前に突っ込むような方がエラーが少ない気がします。

    対応する言語が多い場合は、正規表現なども使わないと配列が巨大になってパフォーマンスに関わる気がしますので、また別の対応が必要かもです。

    Bogo — WordPress Plugins

    の、includes/link-template.php と includes/rewrite.php が参考になります。

    トピック投稿者 kurudrive

    (@kurudrive)

    ありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「多言語サイトで特定の言語の場合にパーマリンク構造を変更したい」には新たに返信することはできません。