問題描述

我成功地將我的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。