状況から考えるとデータベースの移行に失敗して言語関連の 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以上のサーバーを推奨しています。
ご返信、大変ありがとうございます。
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に移行したいため、苦々しく思っております。
だとすると、リライトルール絡みの問題かもしれませんね。
Rewrite Rules Inspector というプラグインを使うことで現在有効なリライトルールを確認することができます。
正常な状態なら (ja|en)/?$
のような Bogo が指定するルールが見られるはずです。
実際のサイトの URL を教えてもらえればもう少し何か指摘できることが出てきたりするかもしれません。
ご返信ありがとうございます。
プラグイン「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でのトップページ表示を採用しております。
本件に関係があるのか分からないまま書いてしまい、長文となり申し訳ありません。
なるほど、リライトルールも正常なのですね。ですがそれがわかったこと自体一歩前進ではないでしょうか。
先のコメントに書かれている別の不具合が気になります。またそれの対処としてとられた方策がいずれも悪手というべきもので、今回の問題に関係している可能性が大いにあるように思います。今後別の、もっと深刻な問題につながる恐れもありますから、すべて元に戻した方がよいでしょう。
HTTP サーバーの設定に何か問題があるのかもしれません。ただの勘ですが。
まだ未完成でフォーラムにURLを載せることが社内規則的にできないため、不躾ながら三好様が公開されているメールアドレスにURLと状況説明のメールをさせていただきたく存じます。
残念ですがサポートは始めから終わりまですべて公開のフォーラム上で行うのがここでのルールです。いただいたメールは読まずにアーカイブさせていただきました。
ご返信ありがとうございます。
フォーラムのルールをよく読まず、勝手にメールをお送りしてしまい申し訳ありませんでした。
サイトをご覧いただきたい気持ちは強いのですが、やはりURLの公開は出来そうにありませんので、
ひとまず引き続き、サーバー周りを中心に独自で調べていきたいと思っております。
原因が分かりましたら、ここに再投稿いたします。
様々なアドバイスをくださり、大変ありがとうございます。
また質問をさせていただくかもしれません(おそらくあります…)。
申し訳ありませんが、その際はよろしくお願いいたします。
またWordCampなどで三好様にお会いできる機会に、
直接お礼を言わせていただけると幸甚です。
お世話になっております。
この件、解決しましたのでご報告します。
サーバーがリバースプロキシ構成であり、その対応が必要であることが原因でした。
以下の一文をwp-config.phpに入れたところ、上記問題は全て解決いたしました。
$_SERVER[‘HTTP_HOST’] = $_SERVER[‘HTTP_X_FORWARDED_HOST’];
サーバーに原因があると分かったのは三好様のお陰です。
大変ありがとうございました。
今後ともよろしくお願いいたします。