Bogo:言語間で同じパーマリンクを使うには?
-
お世話になります。
今までWPMLを使って、多言語サイトを制作していましたが
今回、Bogoを使って構築しようと考えておりまして
投稿、固定、カスタム投稿の多言語化も出来たのですが
WPMLで可能だった、多言語でも同じスラッグを使うにはどうすれば良いでしょうか?実現したいこと・・・
日本語:http://example.com/test/
英語:http://example.com/en/test/
仏語:http://example.com/fr/test/
中国語:http://example.com/cn/test/現在・・・
日本語:http://example.com/test/
英語:http://example.com/en/test-en/
フランス語:http://example.com/fr/test-fr/
中国語:http://example.com/cn/test-cn/
と、先に言語でディレクトリが分かれているのに
スラッグでも言語毎に分けないといけないので
URLの見栄えが悪くなります。こちらを実現する方法があれば、是非教えて下さい!
宜しくお願い致します。
-
言語が違うなら同じスラッグを使えますよ。実際に試してみましたか?
> Takayuki Miyoshi さま
ご返信ありがとうございます!
はい、やってみたのですが、日本語にリダイレクトされるのです。
各ページの確認も、URLを直入力しても同じでした…同じスラッグを多言語で使いたいという話ではなかったんですか?よくわからないのですけど何が問題なのでしょうか。
Bogo 自体はリダイレクトしたりはしません。
そうです、同じスラッグを使いたいのです。
ただ、英語:http://example.com/en/test/
でアクセスすると
日本語:http://example.com/test/
に飛ばされてしまいます…そこで、英語を
http://example.com/en/test1/
などにすると正しく表示されます…
なので、同一スラッグは基本的にダメなのかと思い、投稿いたしました。その http://example.com/en/test/ (固定ページ?)の編集ページに表示されている URL はどうなっていますか?
ページの詳細には http://example.com/en/test/ となっていまして、確認ボタンから確認しても、/en/無しになって、すなわち日本語ページが表示されます。
ちなみに、固定ページではなく、カスタム投稿タイプのページにて作成していますが
そう言えば、以前お聞きした時、カスタム投稿タイプは次期実装でしたでしょうか?その「確認ボタン」とは何のことですか?
カスタム投稿タイプの URL がこのようになっているということですか?それはそもそもおかしいですよね。どのようにしてカスタム投稿タイプを導入したのでしょうか。
そうですよね、こちらの環境が分からないまま
回答下さいまして本当に有難うございます!カスタム投稿タイプはfunctions.phpに書きました。
あと、スクリーンショットを添付してみました。ちなみに下記に挙げたものは
例で、example.com/en/test/としていたtestが
biographyになっております。// カスタム投稿タイプ Biography add_action( 'init', 'register_cpts' ); function register_cpts() { $labels = array( "name" => "Biography", "singular_name" => "biography", ); $args = array( "labels" => $labels, "description" => "", "public" => true, "show_ui" => true, "has_archive" => true, "show_in_menu" => true, "exclude_from_search" => false, "capability_type" => "page", "map_meta_cap" => true, "hierarchical" => true, "rewrite" => array( "slug" => "biography", "with_front" => false ), "query_var" => true, "menu_position" => 17, "supports" => array( "title", "editor", "excerpt", "thumbnail", "page-attributes" ), ); register_post_type( "biography", $args ); } // カスタム投稿タイプにBogo適用 function bogo_add_post_type() { $localizable = array( 'post', 'page','biography' ); return $localizable; } add_filter( 'bogo_localizable_post_types', 'bogo_add_post_type' );
■管理画面でカスタム投稿タイプが追加されている画面(Biography、Newsも追加していますが無視してください。棲み分けの為英語以外他言語消しました)
カスタム投稿タイプ記事一覧■カスタム投稿タイプBiographyの日本語ページ
カスタム投稿タイプ日本語ページ■カスタム投稿タイプBiographyの英語ページ
カスタム投稿タイプ英語ページという感じにURL(Permalink)も表示されています。
そして「確認ボタン」というのは
各言語記事パーマリンク右横の「View Page」のことです。あと、ここにコード載せていて思ったのですが
リライトしているのは、カスタム投稿タイプで”slug” => “biography”としているからだというのを忘れていました、スミマセン。。。ただ、私が今まで使っていたWPMLはこれで同じslugで言語毎に分かれていました。
そして、この環境で意図した動作をするのは、英語詳細ページのslugをbiography1などにすれば、functions.phpはこのままで
日本語:example.com/biography/
英語:example.com/en/biography1/
として表示されます。すみません、このスレッドの冒頭から「スラッグ」と言っていたのはカスタム投稿タイプのリライトスラッグのことだったんですか?何も説明がないので投稿単体のスラッグのことだと思っていたんですが。
いえ、混乱させて大変申し訳ありませんが、上記に
・カスタム投稿タイプ日本語ページ
・カスタム投稿タイプ英語ページ
としてアップしました、投稿記事のslug(画像右側のslug部分)が同じだと
親記事(日本語)のページに遷移してしまいますので
ここが同じでも、日英と分かれて欲しいということです。すみませんが状況がよくわかりません。遷移する件についてはおそらく多言語化以前の問題と思いますから、一度 Bogo も WPML も忘れて、カスタム投稿タイプやパーマリンク設定の周辺を見直された方がよいかと思います。たぶん単純にパーマリンクのリライトルールがフラッシュされていないとかそういう問題です。
先程、一から全く新しくWordPressをインストールした環境に
まっさらのtwentyfifteenテーマに、bogoのみをプラグインにインストールし(WP Multibyte Patchのみ適用、AkismetとDollyは削除)に上記に挙げたfunctions.phpを記載しましたが、同じ挙動で、/en/は省かれ、日本語にリライトされます。。。パーマリンク設定を一度、デフォルトにした後、投稿名に戻して、フラッシュしたのですが同じ状況でした。
なので、サーバの問題ということでしょうか?
Miyoshi さんからの回答も無くなったので、このまま他の方の回答も無いと思いますが、どうすれば解決出来るのか困っていますので、もしどなたかヒントを頂ければと思い、現状をまとめました。
実現したいこと:
カスタム投稿タイプにて、多言語で同じslugにて運用したい
日本語:http://example.com/test/aaa/
英語:http://example.com/en/test/aaa/現状:
投稿、固定ページは同じslugでも望み通りの動作をしているが、カスタム投稿タイプでは同じslugだと日本語に飛ばされ、slugを日本語aaa、英語aaa1など変えるとそれぞれ表示される現環境:
・テスト環境にWordPressをインストール、プラグインはBogoとWP Multibyte Patchのみ動作(その他削除、Rewrite Rules Inspectorのみ停止でリライトルールのフラッシュに使用)
・WordPressバージョンは4.3、Bogo2.5
・テーマはTwenty Fifteen、インストールした状態のまま
・パーマリンク設定は/%postname%/
・functions.phpには、Twenty Fifteenのものをそのままに、カスタム投稿タイプを利用する為と、カスタム投稿タイプにてBogoが使えるようにする為に下記を追記
・パーマリンク設定をデフォルトにしたり投稿名にしたりも試したが同じ挙動
・日本語カスタム投稿タイプページのパーマリンク表記は、http://example.com/test/aaa/ となっており、正しく表示される。英語はhttp://example.com/en/test/aaa/ と表示されてはいるがアクセスすると、日本語ページにリダイレクトされる
・functions.phpに記載しているカスタム投稿タイプで、”rewrite” => falseにして、http://example.com/en/?test=aaa となった場合も日本語http://example.com/?test=aaa に遷移する
・.htaccessにはWordPressのデフォルトの記述のみ
・https://ja.forums.wordpress.org/topic/24252 は確認済みfunctions.phpに追記したもの:
add_action( 'init', 'register_cpts' ); function register_cpts() { $labels = array( "name" => "Test", "singular_name" => "test", ); $args = array( "labels" => $labels, "description" => "", "public" => true, "show_ui" => true, "has_archive" => true, "show_in_menu" => true, "exclude_from_search" => false, "capability_type" => "page", "map_meta_cap" => true, "hierarchical" => true, "rewrite" => array( "slug" => "news", "with_front" => false ), "query_var" => true, "menu_position" => 6, "supports" => array( "title", "editor", "excerpt", "custom-fields", "thumbnail", "page-attributes", "post-formats" ), ); register_post_type( "test", $args ); } function bogo_add_post_type() { $localizable = array( 'post', 'page','test' ); return $localizable; } add_filter( 'bogo_localizable_post_types', 'bogo_add_post_type' );
どなたか解決方法をご教示下さいませ。
何卒、宜しくお願い致します。とりあえず、ローカルで
WordPress 4.3の環境でこのコードを実行してみたところ、同様の問題が再現されました。解決になるかどうかは微妙ですが、
hierarchical => false
にしたところ、リダイレクトが発生しませんでした。
リクエストの処理周りで不具合があるのかもしれません。
こっちでも調査してみます。あと、日本語にリダイレクトされるわけでは無く、その翻訳の元になった記事にリダイレクト(もしかしたらIDが若い順?)にリダイレクトされるようです。
英語の記事を書いてその後日本語の翻訳を作り、日本語にアクセスすると、英語の記事へ飛ばされます。
- トピック「Bogo:言語間で同じパーマリンクを使うには?」には新たに返信することはできません。