質問: 状況と経緯 ------ 運営中のWordPressサイト全体をSSL化したところ、テーマ内で使用しているURLを出力する類の関数が種類によって「http://~~」「https://~~」という異なる出力結果になってしまい困っています。 SSL化前の状況とSSLに際して行った手順は以下になります。 【SSL化前の状況】 ・WordPress + WelcartによるECサイト ・WordPress本体は /wp/ に設置。公開はドメイン直下。 ・オリジナル開発テーマ、SSLを導入する前は問題は無い状態 ・WordPress本体バージョンは最新、サーバーのPHPは5.6系、mySQLは5.5。 【SSL化】 ・XserverにてIPアドレスベースの独自ドメインを申し込み → サーバー側の対応完了 ・WordPress管理画面 > 一般設定 にてWordPressアドレス/サイトアドレスを「https://~」に変更 ・Welcart > システム設定にて SSLを使用する/WordPressのアドレス/ブログのアドレス を変更 このようにしてSSL化した結果、サイトの現状は以下のようになっています。 ・``で出力されるURLが「http://~」(SSL化されていないこと以外は正常) ・``で出力されるURLが「http://~」(SSL化されていないこと以外は正常) ・試しに``にしたところ、多くの場合はSSL化された正しいURLが出力される ・上記の補足として、aタグ内href要素に``のみが存在する場合は、現在表示中のページURLが出力される(最後に別途説明を追加します) ・``など、他にテーマ内で使用されているURLを出力する関数は全て正常 このような状況のため、正しい表記ではないと思いますが``を``に差し替えるか、一部は直接URLを入力して対応しています。 サイトトップや固定ページへのリンクは上記の方法で対応できたのですが、個別投稿へのリンクには``を使うしか方法を知らずに困っています。 質問 --- ``および``がSSL化されたURLを出力してくれない原因と対処方法をご存知の方がいらっしゃいましたら、お力を貸していただけないでしょうか? すでに公開中のサイトですので、根本原因の排除よりも、現在起きているエラーへの処置を優先したいと思っています。 そのため、例えばfunctions.phpに記述することで`home_url()`と`the_permalink()`が出力する値を強制的にhttpsにしてしまう、などの対処方法がありましたら、是非ご教授ください。 よろしくお願いいたします。 補足 --- ``という記述をした時の挙動は以下のようになります。 `/blog/">` → https://example.com/blog/ `/2016/03/03/post1/">` → https://example.com/2016/03/03/post1/ `">` → 現在表示中ページのURL(`http`の箇所も現在表示中のURLに依る) **追記:chitokuさんにご指摘頂いた通り、上記の説明は私は勘違いでした。** 補足2 ---- **頂いたご回答にて`$_SERVER`が必要とのことですが、以下のような情報でよろしいでしょうか?** (私自身で所有しているサイトではないのでドメインなどは伏せ字(xxxxx)にしています。) ``` PHP_SELF /index.php argv - argc - GATEWAY_INTERFACE CGI/1.1 SERVER_ADDR xxxxxxx SERVER_NAME xxxxxxx SERVER_SOFTWARE Apache SERVER_PROTOCOL HTTP/1.1 REQUEST_METHOD GET REQUEST_TIME 1457028756 REQUEST_TIME_FLOAT 1457028756.7541 QUERY_STRING DOCUMENT_ROOT /home/xxxx/xxxx/public_html HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 HTTP_ACCEPT_CHARSET - HTTP_ACCEPT_ENCODING gzip, deflate, sdch HTTP_ACCEPT_LANGUAGE ja,en-US;q=0.8,en;q=0.6 HTTP_CONNECTION close HTTP_HOST xxxxxxx HTTP_REFERER - HTTP_USER_AGENT Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 HTTPS on REMOTE_ADDR xxxxxxx REMOTE_HOST - REMOTE_PORT 25587 REMOTE_USER - REDIRECT_REMOTE_USER - SCRIPT_FILENAME /home/xxxxx/xxxxx/public_html/index.php SERVER_ADMIN xxxxxxx SERVER_PORT 443 SERVER_SIGNATURE PATH_TRANSLATED - SCRIPT_NAME /index.php REQUEST_URI /hoge/ PHP_AUTH_DIGEST - PHP_AUTH_USER - PHP_AUTH_PW - AUTH_TYPE - PATH_INFO - ORIG_PATH_INFO - ```
回答: `$_SERVER` の値を見る限りは正しく PHP 側で SSL が認識できているようですね...。 WordPress の `is_ssl()` 関数の結果もあわせて確認してみてください。 ダメならこれと戦うより素直に次のようにスキームを指定して書いたほうが精神衛生上楽かもしれません。 ``` ```