WordPress をSSL運用すると管理画面でアップロードした画像が見れない

  • 31
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

WordPressネタばかりで嫌だ・・・。1日1個おかしな点が見つかる・・・。

Summary

  • WordPress 管理画面をSSLで運用
  • アイキャッチ画像を選ぶときに、アップロードした画像が見れない
  • 管理画面がSSLなのに img タグの src が HTTP通信なのが原因(WordPress自体のバグ)
  • さっさと直してくれよお願いだから。

Details

管理画面を SSL で運用(するよね?普通)

一応商業利用ですもの、管理画面はSSLにするじゃないですか。
もともとあまり考えられていないのか?SSLにすると何かしら事件が起きる WordPress ですが・・・

画像が見えない

よしきた。
管理画面に SSL を導入したその日、ログイン画面で CSS や画像が見えない事件が発生したが、それと同じ理由。

最近の(?)WEBブラウザは HTTPS の画面から HTTP通信しようとすると事前に止めてくれます。親切設計。

その時やった設定はこちら↓

httpd.conf
...
DocumentRoot /root/to/wordpress
SetEnv HTTPS on  #これを追加
...

ELBの背後で80番しか受け取らないようにしているので、自分で環境変数を設定する必要があり。
wordpress 内に実は is_ssl() という関数があって、その中で環境変数を読んでくれます。

wp-includes/functions.php
3367 function is_ssl() {
3368   if ( isset($_SERVER['HTTPS']) ) {
3369     if ( 'on' == strtolower($_SERVER['HTTPS']) )
3370       return true;
3371     if ( '1' == $_SERVER['HTTPS'] )
3372       return true;
3373   } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
3374     return true;
3375   }
3376   return false;
3377 }

基本的にはSSLかどうかの判定はこの is_ssl() を使ってやっていて、CSSや画像もSSL通信に変えてくれるのですが・・・。

画像が見れないとはどういう了見だ(#゚Д゚)ゴルァ!!

アイキャッチ画像が見れない。
自分でアップロードした画像を「アイキャッチ画像」として選ぶのですが、その画像が見れない。

要素を検証すると、どっかで見た状態。
<img src="http://xxx...">

(つд⊂)ゴシゴシ
(つд・)
(つд⊂)ゴシゴシ
(・д⊂)
なんでや!(#゚Д゚)ゴルァ!!

調べた

こんな記事を見つけた↓
https://core.trac.wordpress.org/ticket/15928

WordPress の既存バグじゃねぇかよ!!!

3年前から議論してて未だに未対応って・・・。
4.0 で入れっからーじゃねぇよ(#゚Д゚)ゴルァ!!

直した

使ってるテーマの functions.php に以下を追加。
※ちなみに添付されてる最新のパッチでは直りませんでした\(^o^)/

functions.php
// http => https  -----------------------------------------------------
function fix_ssl_attachment_url( $url ) { 
    if( is_ssl() ){
        $url = preg_replace('/^http:/', 'https:', $url);
    }   
    return $url;
}
add_filter('wp_get_attachment_url', 'fix_ssl_attachment_url');

もういい加減 WordPressネタやめたい・・・。