サポート » プラグイン » localeが切り替わらない(それによりbogoのshortcodeが想定した動作をしてくれない)

  • 解決済 moriibe

    (@moriibe)


    bogoで日本語と英語を切り替え可能なサイトを構築中です。
    shortcodeによる言語切り替えや、get_localeでlocale情報を取得してif分岐で日英切り替えを行っています。

    事前に構築したテストサーバーでは万事上手くいき、shortcodeで作成したボタンで日英を切り替えると
    locale情報もjaとen-USに切り替わっていました。
    しかし本番サーバーにファイルやDBを移行したところ、localeがja → en_USに切り替わらず、
    その結果shortcodeの切り替えにも失敗しています。
    (なおダッシュボードで言語パックをen_USに設定すると、今度は逆にen_USのままとなり、jaに移りません。)

    また、出力されたHTMLを確認すると以下の疑問点が見つかりました。
    ・header.phpのhtmlタグにあるlanguage_attributes()が、英語ページでもlang=’ja’を出力している。
    ・bogoが出力しているlinkタグが下記のとおり出力されており、en-USの後ろに’en/’が付与されない。
     <link rel=”alternate” hreflang=”ja” href=”http://(なぜかドメインではなくIPアドレスが表示)/wordpress/”&gt;
     <link rel=”alternate” hreflang=”en-US” href=”http://(なぜかドメインではなくIPアドレスが表示)/wordpress/”&gt;

    環境は以下のとおりです。
    ・WordPress4.9.8
    ・独自テーマ。プラグインで有効化しているのはBackWPup,Bogo,WP Multibyte Patch。
     プラグイン無効化やキャッシュクリアは検証済み。
    ・PHP5.4.16
    ・MariaDB5.5.52 (テスト環境ではmySQL)
    ・CentOS Linux relese 7.3.1611(Core)、クラウドサーバー
    ・ブラウザーは最新版で一通り試しましたが、全て同様の結果が起こります。

    以上です。フォーラム違いでしたら申し訳ありません。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • モデレーター Takayuki Miyoshi

    (@takayukister)

    状況から考えるとデータベースの移行に失敗して言語関連の post_meta レコードがそっくり欠落しているというのが最もありそうな感じがします。移行の手順をもう一度見直してみてください。

    ところで直接関係はないと思うのですが、

    ・PHP5.4.16
    ・MariaDB5.5.52 (テスト環境ではmySQL)
    ・CentOS Linux relese 7.3.1611(Core)、クラウドサーバー

    何か理由があってこのような古いリリースを本番環境に採用されているのでしょうか?

    念のため WordPress.org の動作要件を引用しておきます。

    動作要件

    PHP バージョン7.2以上、そして MySQL バージョン5.6または MariaDB バージョン10.0以上のサーバーを推奨しています。

    トピック投稿者 moriibe

    (@moriibe)

    ご返信、大変ありがとうございます。
    postmetaのmeta_keyが’_locale’であるmeta_valueを確認したところ、
    全てに’ja’もしくは’en_US’が付与されていました。
    レコード数自体もテストサーバーと本番サーバーで違いはありませんでした。

    本件、説明不足で申し訳ありません。
    現状、本番環境においても、URLに/en/を挟めば固定ページやカスタム投稿は
    英語ページに切り替わります。
    例えばshortcodeの代わりに『日英切替ボタンの「英」ボタンを押すとURLに/en/が入る、
    「日」ボタンを押すとURLから/en/を消す』というスイッチをPHPで自作してみたところ、
    固定ページ・カスタム投稿自体の切替は正常に動いていました。

    問題だと認識していますのは、システム(と表現して良いか分かりませんが)側の
    localeの切り替えが上手くいっていないことです。
    例えば英語ページ(URLに/en/が入っているページ)でget_locale()をしても
    ‘ja’が出力されますし、WordPress関数のThe_title()やhome_url()や
    get_bloginfo()といったURLを出力するものがことごとく
    日本語ページ(URLに/en/が入っていないページ)を指してしまいます。

    おそらくBogoに根ざしていない問題で恐縮ですが、
    心当たりありましたらご教示くださりますと幸いです。
    よろしくお願いいたします。

    なお、本番環境が古いバージョンなのは、同じサーバーにて別の業者が別のシステムを
    展開しており、そのシステムがPHP7に非対応であることが原因です。
    こちらとしましても速やかにPHP7に移行したいため、苦々しく思っております。

    モデレーター Takayuki Miyoshi

    (@takayukister)

    だとすると、リライトルール絡みの問題かもしれませんね。

    Rewrite Rules Inspector というプラグインを使うことで現在有効なリライトルールを確認することができます。

    正常な状態なら (ja|en)/?$ のような Bogo が指定するルールが見られるはずです。

    実際のサイトの URL を教えてもらえればもう少し何か指摘できることが出てきたりするかもしれません。

    トピック投稿者 moriibe

    (@moriibe)

    ご返信ありがとうございます。

    プラグイン「Rewrite Rules Inspector」を追加して確認いたしました。
    Rule中に(ja|en)/?$という表記も確認することができ、
    Rewriteがindex.php?lang=$matches[1]、Sourceがpost_formatとなっております。
    なおこのルールが計300行ほどあり、(ja|en)/?$はその30行目ほどです。
    テスト環境にも同プラグインを入れて本番環境の全レコードとdiff比較しましたが、完全に一致していました。

    大変お手数をおかけするのですが、ご提案を頂戴したとおり、ホームページをご覧いただいても宜しいでしょうか。
    まだ未完成でフォーラムにURLを載せることが社内規則的にできないため、不躾ながら三好様が公開されているメールアドレスに
    URLと状況説明のメールをさせていただきたく存じます。よろしくお願いいたします。
    (進展については、フォーラム中にも記していく所存です)

    なおリライトルートと関係があるかもしれませんので、少し前に別の不具合があったことをご報告させていただきます。
    本番環境への移行処理を終えてトップページを開こうとすると、301エラーとなりページを開けず、
    最終的にはURLの末尾に”index.php”を追加したところ、トップページが開きました。
    トップページ以外のページは問題なく開いたのですが、トップを開くときだけindex.phpの入力が必要という状況でした。
    この問題は、当時は「設定」→「ホームページの表示」で固定ページをトップページにしていたのですが、
    「最新の投稿」を”ホームページの表示”として、front-page.phpをトップページにしたところ解消しています。
    (他サイトで、固定ページではなく最新の投稿とすると直ったと報告があったので、理由は分からないままそうしております)

    この問題のもう一つの解消方法として、wp-includes/template-loader.phpの
    do_action( ‘template_redirect’ );をコメントアウトするという方法をインターネット上で見つけて、
    (例えば: http://web-wizardry.net/wordpress/wordpress-redirect/)
    試したのですが、この方法でも問題は解決しました。ただ、WordPressにログインして、サイトページに戻っても
    上の管理バー(メニューバー)が表示されなくなったため、前者のfront-page.phpでのトップページ表示を採用しております。

    本件に関係があるのか分からないまま書いてしまい、長文となり申し訳ありません。

    モデレーター Takayuki Miyoshi

    (@takayukister)

    なるほど、リライトルールも正常なのですね。ですがそれがわかったこと自体一歩前進ではないでしょうか。

    先のコメントに書かれている別の不具合が気になります。またそれの対処としてとられた方策がいずれも悪手というべきもので、今回の問題に関係している可能性が大いにあるように思います。今後別の、もっと深刻な問題につながる恐れもありますから、すべて元に戻した方がよいでしょう。

    HTTP サーバーの設定に何か問題があるのかもしれません。ただの勘ですが。

    まだ未完成でフォーラムにURLを載せることが社内規則的にできないため、不躾ながら三好様が公開されているメールアドレスにURLと状況説明のメールをさせていただきたく存じます。

    残念ですがサポートは始めから終わりまですべて公開のフォーラム上で行うのがここでのルールです。いただいたメールは読まずにアーカイブさせていただきました。

    トピック投稿者 moriibe

    (@moriibe)

    ご返信ありがとうございます。

    フォーラムのルールをよく読まず、勝手にメールをお送りしてしまい申し訳ありませんでした。
    サイトをご覧いただきたい気持ちは強いのですが、やはりURLの公開は出来そうにありませんので、
    ひとまず引き続き、サーバー周りを中心に独自で調べていきたいと思っております。
    原因が分かりましたら、ここに再投稿いたします。

    様々なアドバイスをくださり、大変ありがとうございます。
    また質問をさせていただくかもしれません(おそらくあります…)。
    申し訳ありませんが、その際はよろしくお願いいたします。
    またWordCampなどで三好様にお会いできる機会に、
    直接お礼を言わせていただけると幸甚です。

    トピック投稿者 moriibe

    (@moriibe)

    お世話になっております。
    この件、解決しましたのでご報告します。

    サーバーがリバースプロキシ構成であり、その対応が必要であることが原因でした。
    以下の一文をwp-config.phpに入れたところ、上記問題は全て解決いたしました。

    $_SERVER[‘HTTP_HOST’] = $_SERVER[‘HTTP_X_FORWARDED_HOST’];

    サーバーに原因があると分かったのは三好様のお陰です。
    大変ありがとうございました。

    今後ともよろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「localeが切り替わらない(それによりbogoのshortcodeが想定した動作をしてくれない)」には新たに返信することはできません。