Làm cách nào để tắt hình ảnh phản hồi trong WP 4.4?


37

Tôi đã chuyển đổi cài đặt 4.3.1 của mình sang tất cả https. Sau khi cập nhật lên 4.4. Tôi có một vấn đề với srcsetthuộc tính mới . Trong khi srcthuộc tính cho hình ảnh được đặt bằng https, srcsetthuộc tính là http. Điều này khiến các trình duyệt không hiển thị bất kỳ hình ảnh nào cả.

Trong khi chờ sửa chữa tốt hơn, tôi muốn tắt srcsethoàn toàn cài đặt thuộc tính để tất cả các hình ảnh chỉ có một srcthuộc tính. Làm thế nào để làm điều đó?


2
Tôi cũng muốn biết điều này - nó chỉ tạo ra một mớ hỗn độn của trang web của chúng tôi!
Chris

Tôi đã thử nhiều cách khác nhau nhưng không thành công nhưng tôi muốn để lại câu hỏi chính cho các cách tiếp cận mới. Sự quyết liệt nhất trong những nỗ lực của tôi là bình luận về add_filterdòng default-filters.phpmà tôi tin là có trách nhiệm://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokkr

1
Thay vì vô hiệu hóa hình ảnh phản hồi, bạn nên tìm kiếm những gì đang trộn HTTP và HTTPS vì chức năng hình ảnh phản hồi không phải là nguồn gốc của vấn đề. Tất cả các trang web của tôi đều thuộc HTTPS và srcsetđược WordPress tạo chính xác. Làm thế nào bạn di chuyển từ HTTP sang HTTPS?
cybmeta


Có vẻ như chào đón khá rõ ràng bây giờ. Lời xin lỗi cho việc đăng bài kép - vấn đề gốc (srcset nên sử dụng https) cũng được giải quyết trong chuỗi mà tôi đã bắt đầu tại wordpress.org ( wordpress.org/support/topic/ .) vì vậy khi nó được hồi sinh Cảm ơn joemcgill đã giải quyết nó ở đó.
brokkr

Câu trả lời:


43

Dưới đây là một số điều bạn có thể thử để loại bỏ hỗ trợ hình ảnh phản hồi trong 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_empty_array',  PHP_INT_MAX );

// Override the calculated image sources
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );

// Remove the reponsive stuff from the content
remove_filter( 'the_content', 'wp_make_content_images_responsive' );

nhưng như được đề cập bởi @cybmeta, vấn đề có thể ở nơi khác.

Buộc https vào srcset

Bạn có thể thực hiện một số sửa lỗi với wp_calculate_image_srcsetbộ lọc và thậm chí thử cách khắc phục nhanh này :

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 );

để đặt lược đồ url thành https. Một cách tiếp cận khác là làm cho nó không có âm mưu //.

Kiểm tra Codex cho các set_url_scheme()tùy chọn khác :

$source['url'] = set_url_scheme( $source['url'], null );        
$source['url'] = set_url_scheme( $source['url'], 'relative' );

Nhưng bạn nên cố gắng đào sâu hơn và tìm ra nguyên nhân gốc rễ.

Cập nhật:

Chúng ta có thể bảo lãnh sớm hơn từ wp_calculate_image_srcset()chức năng với:

add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );

sau đó sử dụng wp_calculate_image_srcsethoặc max_srcset_image_widthbộ lọc.

Cũng được cập nhật theo vé # 41895 , để trả về một mảng trống thay vì false / null.


Chỉ cần xác nhận rằng cả hai cách tiếp cận đều có hiệu quả đối với tôi, srcset đã vô hiệu hóa loại bỏ srcset (và do đó mang lại hình ảnh 'cố định') và lực lượng https đã thay đổi url srcset thành https. Cả hai phương pháp đều loại bỏ cảnh báo nội dung hỗn hợp.
brokkr

4
Các add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );giải pháp làm việc tuyệt vời cho tôi. Cảm ơn bạn!
Tim Bowen

Vui mừng khi nghe nó đã giúp.
bạch dương

Điều này sẽ gây ra cảnh báo trên trình xác nhận: "Thuộc tính kích thước chỉ có thể được chỉ định nếu thuộc tính srcset cũng có mặt."
Michael Rogers

Có vẻ như bạn đã lọc srcset nhưng không phải thuộc tính kích cỡ. @MichaelRogers
birgire

13

Cách đơn giản và sạch nhất để làm điều này chỉ đơn giản là:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Để lặp lại những gì hầu hết mọi người khác đang nói, srcset là một ý tưởng tốt và là tương lai (thực tiễn tốt nhất hiện nay), nhưng nếu bạn cần một bản sửa lỗi nhanh để giữ cho trang web của bạn hoạt động, đoạn trích trên sẽ thực hiện công việc mà không cần hack.

nguồn: Blog WP Core


5
Chỉ cần sử dụng __return_falsethay vì disable_srcset, wp có các chức năng cho các tác vụ đơn giản như thế.
Jake

3
Và cả hai bạn đều có thể cải thiện mã của mình bằng cách không tạo một hàm hoàn toàn mới chỉ để trả về false. WordPress cung cấp các chức năng để làm điều đó. codex.wordpress.org/Function_Reference/_return_false
Jake

1
Đây là giải pháp đúng đắn. Tính năng này cũng được nghĩ đến như wp_autop. Tôi sử dụng <hình ảnh> để có được hướng nghệ thuật cũng như hình ảnh phản hồi và điều này không giải quyết được điều đó.
Peter Wooster

1
@Jake trên thang điểm từ 1 đến 10, "tạo một hàm mới chỉ để trả về false" thêm khoảng -2 bloat vào WordPress. Mã tự viết tài liệu mà bất kỳ ai (không chỉ là một nhà phát triển WP) có thể hiểu là có giá trị nhất định.
Mahmoud Al-Qudsi

1
@ MahmoudAl-Qudsi Vì '__return_false' rất khó hiểu? Cuộc thảo luận này, trên một diễn đàn WordPress, là về việc tắt một tính năng WordPress. Không có gì là điên rồ khi chỉ sử dụng các hàm trả về mặc định, rất cơ bản và được ghi chép đầy đủ của WordPress để làm điều đó. Thực tế là hàm được đặt tên là "return_false" khá tự ghi lại. Hãy thử và đoán những gì nó làm?
Jake

7

Rất có thể, lý do các URL trong srcsetthuộc tính của bạn hiển thị HTTPS không chính xác là do các URL cho tất cả các hình ảnh được xây dựng bằng cách sử dụng giá trị của tùy chọn siteurl trong bảng wp_options của bạn. Nếu bạn đang phục vụ giao diện người dùng của mình qua HTTPS, bạn cũng nên thay đổi các giá trị đó (thông qua Cài đặt> Chung).

Đây là vé liên quan trên hệ thống theo dõi vấn đề WordPress: https://core.trac.wordpress.org/ticket/34945


5

Điều này sẽ vô hiệu hóa mã srcset bằng cách loại bỏ bất kỳ hình ảnh nào rộng hơn 1 pixel.

add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );

Về lâu dài, bạn nên cố gắng khắc phục sự cố thực tế. Tuy nhiên, điều này hoạt động nếu bạn cần một sửa chữa nhanh chóng.



1
Điều gì về created_factor ()? Tôi cũng thích câu trả lời của mình để làm việc trong PHP 5.2.
Otto

2

Trong Cài đặt / Chung, đảm bảo Địa chỉ WordPress (URL) và Địa chỉ trang web (URL) của bạn được đặt thành https://yourdomain.com

Xem http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-fter-USE-ssl

Joe McGill, người đã giúp dẫn dắt nỗ lực đưa hình ảnh phản hồi vào WordPress, cũng đã trả lời trong chủ đề diễn đàn và xác nhận đề xuất của Cree là chính xác, nếu bạn đang chạy HTTPS ở mặt trước, bạn nên thay đổi URLS cho trang chủ và trang web của mình URL trong Cài đặt> Chung để họ sử dụng lược đồ HTTPS, ông nói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.