In den WordPress-Einstellungen muss die WordPress-URL (die für viele Ressourcen-URLs verwendet wird) auch fest codiert werden http://
oder https://
in der URL. Dies führt zu Problemen, wenn unsichere Teile auf eine sichere Site geladen werden oder umgekehrt. Wie gehe ich damit um?
Beispiel:
//The wordpress URL setting (In Settings->General)
http://example.net
//An image source (this is now http://example.net/images/myimage.png)
$imageSource = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), "myimage" );
?><img src="https://stackoverflow.com/questions/24127714/<?php%20echo%20$imageSource;%20?>" .?<?php ... ?>
Wenn der Benutzer zu Besuch ist https://example.net
wird das Bild weiterhin vom unsicheren “http” geladen.
Wie behebe ich das, damit eine Site in https alles lädt (nicht nur wp_get_attachment_image_src
) in https und umgekehrt?
Das ist ein bekannter Defekt/Bug in WordPress und soll in WP 4.0 behoben werden.
Inzwischen, Hier ist ein Filter, den ein WP-Entwickler gepostet hat mit denen ich großen Erfolg hatte:
function ssl_post_thumbnail_urls($url, $post_id) {
//Skip file attachments
if(!wp_attachment_is_image($post_id)) {
return $url;
}
//Correct protocol for https connections
list($protocol, $uri) = explode('://', $url, 2);
if(is_ssl()) {
if('http' == $protocol) {
$protocol="https";
}
} else {
if('https' == $protocol) {
$protocol="http";
}
}
return $protocol.'://'.$uri;
}
add_filter('wp_get_attachment_url', 'ssl_post_thumbnail_urls', 10, 2);
Sie müssten nur das http in der URL-Zeichenfolge ersetzen.
$imageSource = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), "myimage" );
$output = preg_replace( "^http:", "https:", $imageSource );
echo $output;
Sie können Ihren erforderlichen Funktionen jederzeit einen Filter hinzufügen (z. B.: add_filter( 'template_directory_uri', function( $original )
… um immer SSL zu verwenden.
Nur um die @Epik-Antwort näher auszuführen – Wir sollten ein HTTP bei HTTP und HTTPS bei HTTPS bereitstellen.
Wir können eine Logik hinzufügen, die mit der eingebauten WordPress-Funktion is_ssl() prüft und dann entweder den Preg-Ersatz durchführt oder das Standard-http verwendet.
$imageSource = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), "myimage" );
$output = is_ssl() ? preg_replace( "^http:", "https:", $imageSource ) : $imageSource ;
echo $output;
10020100cookie-checkWordPress-URL und wp_get_attachment_image_src – http vs. httpsyes