私のサイトでは、すべてのimg src HTMLにhttpsを使用する必要があります。
これは私が画像を表示するために使っているWordPressの機能です:
<img src="'.get_bloginfo("template_url").'/images/thumb-default.gif" />
これはhttp img srcを出力します - どうすればそれをhttpsに変換できますか?
WordPressは、is_ssl()
を使用してURLを作成する前に、get_bloginfo()
の戻り値を確認します。この関数がtrueを返すと、httpsのURLが作成されます。 falseが返されると、http URLが作成されます。
WordPressのソースから...
function is_ssl() {
if ( isset($_SERVER['HTTPS']) ) {
if ( 'on' == strtolower($_SERVER['HTTPS']) )
return true;
if ( '1' == $_SERVER['HTTPS'] )
return true;
} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
return true;
}
return false;
}
つまり、リクエストがhttps経由で行われた場合、またはリクエストがポート443経由で受信された場合、get_bloginfo()
はhttps://
のURLを返します。実際、httpsを強制している場合は、すべての要求をポート80(http)からポート443(https)に強制する必要があります。ただし、これはWordPressの問題ではなくサーバー構成の問題です。
あるいは、フィルタにフックしてhttpをhttpsに置き換えることもできます。
ただ使用してください:
function replace_http( $original ) {
// use preg_replace() to replace http:// with https://
$output = preg_replace( "^http:", "https:", $original );
return $output;
}
add_filter( 'template_url', 'replace_http' );
home_url() 関数を使用すると自動的にsslを検出してプロトコルを変更します。
EAMannが提案した修正に追加するために、バージョン3.5でいくつかの変更を加えました。
add_filter( 'template_directory_uri', function( $original ) {
$output = preg_replace( "/^http:/i", "https:", $original );
return $output;
});
このリダイレクトは非常に役に立つかもしれませんが、私のサーバーはSSLを別のポートにリダイレクトし、WPによって検出されないので、私にとっては厄介です。
http
またはhttps
リンクでページをリクエストするときにこれをチェックしましたか? is_ssl()
はあなたに何を返しますか?
私は現時点でテストするSSL対応のスタックを持っていませんが、リンクをまとめたWP関数がSSLを認識して正しいバージョンを出力するはずであることは確かです。