在Wordpress设置中,Wordpress URL(用于许多资源网址)要求您在网址中对http://
或https://
进行硬编码。这导致在安全站点上加载不安全部件的问题,反之亦然。我该如何处理?
示例:
//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="<?php echo $imageSource; ?>" .?<?php ... ?>
如果用户正在访问https://example.net
,则仍会从非安全&#34; http&#34;中加载图片。
如何解决此问题,以便https中的网站加载https中的所有内容(不只是wp_get_attachment_image_src
),反之亦然?
答案 0 :(得分:13)
这是WordPress中的known defect/bug,计划在WP 4.0中修复。
与此同时,here is a filter a WP dev posted我取得了巨大的成功:
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);
答案 1 :(得分:5)
您只需要替换URL字符串中的http即可。
$imageSource = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), "myimage" );
$output = preg_replace( "^http:", "https:", $imageSource );
echo $output;
您始终可以为所需的功能添加过滤器(例如:add_filter( 'template_directory_uri', function( $original )
...以始终使用SSL。
答案 2 :(得分:0)
仅详细说明@Epik答案 - 我们应该在HTTPS时使用HTTP和HTTPS服务HTTP。
我们可以添加一些逻辑,使用内置的Wordpress函数is_ssl()进行检查,然后执行preg替换或使用标准的http。
$imageSource = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), "myimage" );
$output = is_ssl() ? preg_replace( "^http:", "https:", $imageSource ) : $imageSource ;
echo $output;