问题描述

我成功地将我的 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_srcsetmax_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。