在Wordpress 4.4中,图像自动获得一个srcset
属性。我的问题如下(我在写这个问题时解决了它,见下面的答案):
src=“http://...src=“https://...
(我后来将其更改为src=“//…
以支持两种协议);
src
属性中获得正确的URLsrcset
属性的图像中,其中的URL总是带有http://
引用为什么会发生这种情况?为什么这些URL没有得到我最新更新的https://
开头?
在< code>wp-includes文件夹中搜索一段时间后,< code>media.php文件中的< code > WP _ calculate _ image _ srcset 方法使用这两行:
$image_baseurl = _wp_upload_dir_baseurl();
$image_baseurl = trailingslashit( $image_baseurl ) . $dirname;
而这个$image_baseurl
实际上会形成srcset
属性的新URL,即即使整个URL在wp_posts
表中并在src
属性中使用,它的开头也不会被使用。
这意味着如果wp_options
表中的基本url仍然在超文本传输协议://
中,图像将获得该协议,并且在https中导航时默认不会显示在浏览器中。
为了解决这个问题,您只需将wp_options
表中的option_value
中的URL更改为https://
,或者如果您仍然想支持这两种协议(双斜线),只需将其更改为//
。您可以在单个查询中执行此操作:
UPDATE `wp_options`
SET `option_value` = replace(option_value, 'http://', '//')
WHERE `option_name` IN ('siteurl', 'home')
在设置下的管理员中更改以下设置-
WordPress地址(URL):https://yoursitename.com网站地址(URL):https://yoursitename.com
并按下[保存更改]按钮。最后刷新您的页面,您的图像将以正确的srcset属性显示在您的浏览器上。
如果你不想把你的WordPress地址(URL)改成https,那么就把这段代码放到你的活动主题functions.php文件中
function codextent_ssl_srcset( $sources ) {
foreach ( $sources as &$source ) {
$source['url'] = set_url_scheme( $source['url'], 'https' );
}
return $sources;
}
add_filter( 'wp_calculate_image_srcset', 'codextent_ssl_srcset' );
**也可以在wp-config.php文件的顶行中添加此项。
$_SERVER['HTTPS'] = 'on';