質問: ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/35d3e4b877a782c31848d2a84e8528e4.png) 環境 -- WordPress 5.0.2(※WhatsRunで見ると4.1.25と表示される) PHP 5.3.3 Nginx 1.14.1 困っていること ------- wordpressのURL変更を行いましたが、管理画面内の投稿一覧ページに古いURLが残り投稿のソートができずに困っています。 変更前アドレス:https://**japan**.example.com/ 変更後アドレス:https://www.example.com/**japan**/ タイトル部分など赤く囲った部分のアドレスがhttps://**japan**.example.com/**japan**/wp-admin/edit.php?orderby=title&order=ascなどとなってしまい、404エラーとなります。 手作業でhttps://www.example.com/japan/wp-admin/edit.php?orderby=title&order=ascとしてやることにより表示することは可能です。 URLを一括置換したので、DB内を古いURLで検索かけても該当箇所が見つからず困っています。 エラー箇所(古いURLが残っている) ------------------ 管理画面 投稿一覧のソート用リンク(タイトル・日付・last modified) 管理画面 固定ページ一覧のソート用リンク(タイトル・日付・last modified) 管理画面 コメント一覧のソート用リンク(作成者・コメント先・投稿日時) 正常な箇所(新URLになっている) ----------------- ・投稿一覧 投稿タイトルのリンク ・投稿一覧 すべて・所有・公開済み・非公開のリンク ・メディアライブラリ内のリンク やったこと ----- ・設定>一般の WordPress アドレス、サイトアドレスの書き換え ・Database Search and Replace Script in PHPを使い、DB内のURL書き換え ・プラグインの全無効化 ・カスタマイズしていないテーマ差し替え やってないこと ------- ・リバースプロキシ関連 ・htaccess関連 --- 今まで100以上のサイトを作りましたが、同様のトラブル経験がないため途方に暮れています。 解決策ありましたらご教示いただけますと幸いです。 よろしくお願いいたします。
回答: まずは、 1) プラグインを全て無効にして、発生するか確認する。 2) カスタマイズししていない WordPress 標準テーマで、発生するか確認する。 の情報を記載して欲しいところですが... どこで URL が設定されているか WordPress のソースコードを検索してみると「投稿」や「固定ページ」一覧画面の見出しのリンクを作成している部分は、print_column_headers() の ``` $column_display_name = '' . $column_display_name . ''; ``` で作成しているようです。 上記の中で、URL を組み立てている部分は、 `add_query_arg( compact( 'orderby', 'order' ), $current_url ) )` の部分で、 `$current_url` に `orderby=$order` のパラメータを追加して URL を組み立てています。 ( 関数の意味は、関数リファレンス/add_query_arg や PHP マニュアル 関数リファレンス compact 参照 ) そこで、$current_url のサーバー名をどこで指定しているのか探すと関数の先頭に下記のような記載があり、`$_SERVER['HTTP_HOST']` を使用して URL を作成しています。 ( 関数の意味は、set_url_scheme 参照) ``` $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); ``` ということで、`$_SERVER['HTTP_HOST']` が影響しているようですが、お使いの環境の `$_SERVER['HTTP_HOST']` は、どうなっていますか? `var_dump($_SERVER)` や `phpinfo()` 等で確認してみてください。 最後に、質問に記載されたドメイン名は所有者がいますので、ご自身が所有されていない場合は「例示用に用意されているドメイン名( example.com / example.net / example.jp 等)」を使ってください。( 例示用ドメイン名については、 や 例示に使用可能なドメイン名はありませんか? 等を参照してください。)