- ステータス
- 解決済み
- 解決されたバージョン
- 4.0.0
問題の概要
4.0.0より前のバージョンでは、WPMLは変換時に入力URLと末尾のスラッシュを一致させようとしていました。残念ながら、このロジックはすべてのケースに対応できるものではありませんでした。
4.0.0以降、変換されたURLは以下の標準的なWordPressの動作に一致するようになります。
- パスもクエリもない場合、WPMLは入力URLに一致させようとします(例:http://wpml.com => http://wpml.fr、または http://wpml.com/ => http://wpml.fr/)。ただし、通常WordPressは末尾のスラッシュなしでホームURLを出力します。
- パスがなくクエリがある場合、常に末尾にスラッシュが付きます(例:http://wpml.com?foo=bar => http://wpml.fr/?foo=bar)。
- パス(ファイルではない)がある場合、末尾のスラッシュはパーマリンクのフォーマットに依存します。
- ファイルを指すパスがある場合、(パーマリンクのフォーマットに関係なく)末尾にスラッシュは追加されません。例:http://wpml.com/wp-content/uploads/hello.csv。
回避策
この変更は、テーマやサードパーティ製プラグインに予期せぬ副作用をもたらす可能性があります。
URLを構築する際には文字列の連結を避け、以下のような関数を使用することを強くお勧めします。
- URLクエリを構築するためのadd_query_arg。
- サーバー上でこの関数が利用可能な場合はhttp_build_url(ただし、WPMLがポリフィルを提供しています)。
- 末尾のスラッシュを追加または削除するためのtrailingslashit、untrailingslashit。
たとえば、以下のコードは:
$url = get_home_url() . '/' . $path;
次のように置き換える必要があります:
$url = trailingslashit( get_home_url() ) . $path;