问题描述
我成功地将我的 4.3.1 安装转换为所有的 https 。更新到 4.4 后。我有一个新的 srcset
属性的问题。虽然使用 https 设置图像的 src
属性,但 srcset
属性为 http 。这导致浏览器根本不显示任何图像。
在等待更好的修复时,我希望禁用 srcset
属性的设置,以使所有图像只有一个 src
属性。我怎么做?
最佳解决方案
以下是您可以尝试删除 4.4 中响应式图像支持的几项:
/**
* Disable responsive image support (test!)
*/
// Clean the up the image from wp_get_attachment_image()
add_filter( 'wp_get_attachment_image_attributes', function( $attr )
{
if( isset( $attr['sizes'] ) )
unset( $attr['sizes'] );
if( isset( $attr['srcset'] ) )
unset( $attr['srcset'] );
return $attr;
}, PHP_INT_MAX );
// Override the calculated image sizes
add_filter( 'wp_calculate_image_sizes', '__return_false', PHP_INT_MAX );
// Override the calculated image sources
add_filter( 'wp_calculate_image_srcset', '__return_false', PHP_INT_MAX );
// Remove the reponsive stuff from the content
remove_filter( 'the_content', 'wp_make_content_images_responsive' );
但是如 @cybmeta 所提到的,问题可能在其他地方。
强制 https srcset
您可以使用 wp_calculate_image_srcset
过滤器进行一些调试,甚至尝试使用此 quick-fix:
add_filter( 'wp_calculate_image_srcset', function( $sources )
{
foreach( $sources as &$source )
{
if( isset( $source['url'] ) )
$source['url'] = set_url_scheme( $source['url'], 'https' );
}
return $sources;
}, PHP_INT_MAX );
将 URL 方案设置为 https
。另一种方法是使其无模式//
。
查看其他 set_url_scheme()
选项的 Codex:
$source['url'] = set_url_scheme( $source['url'], null );
$source['url'] = set_url_scheme( $source['url'], 'relative' );
但您应该尝试深入挖掘并找出根本原因。
更新:
我们可以从 wp_calculate_image_srcset()
功能中提前救出:
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
然后使用 wp_calculate_image_srcset
或 max_srcset_image_width
过滤器。
次佳解决方案
最简单和最干净的做法就是这样做:
function disable_srcset( $sources ) {
return false;
}
add_filter( 'wp_calculate_image_srcset', 'disable_srcset' );
为了回应大多数其他人所说的话,srcset 是一个好主意和未来,但是如果您需要一个快速修复来保持网站的正常运行,上述代码段将无需任何黑客攻击。
来源:WP Core Blog
第三种解决方案
很可能,srcset
属性中的 URL 错误地显示 HTTPS 的原因是因为所有图像的 URL 都是使用 wp_options 表中的 siteurl 选项的值构建的。如果您通过 HTTPS 提供前端服务,您还应该更改这些值 (通过 「设置」>「常规」) 。
以下是 WordPress 问题跟踪系统上的相关票证:https://core.trac.wordpress.org/ticket/34945
第四种方案
这将通过消除比 1 像素更宽的图像来禁用 srcset 代码。
add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );
从长远来看,您应该尽量解决实际的问题。但是,如果您需要快速修复,则可以正常工作。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。