Bagaimana cara menonaktifkan gambar responsif di WP 4.4?

37

Saya berhasil mengubah pemasangan 4.3.1 saya ke semua https. Setelah memperbarui ke 4.4. Saya punya masalah dengan srcsetatribut baru . Sementara srcatribut untuk gambar diatur menggunakan https, srcsetatributnya adalah http. Ini menyebabkan browser tidak menampilkan gambar sama sekali.

Sambil menunggu perbaikan yang lebih baik, saya ingin menonaktifkan pengaturan srcsetatribut sehingga semua gambar hanya memiliki srcatribut. Bagaimana aku melakukan itu?

brokkr
sumber
2
Saya juga ingin tahu ini - itu hanya membuat kekacauan situs web kami!
Chris
Saya telah mencoba berbagai cara tetapi tidak berhasil tetapi saya ingin membiarkan pertanyaan utama terbuka pada pendekatan baru. Upaya saya yang paling drastis adalah mengomentari add_filterkalimat yang menurut default-filters.phpsaya bertanggung jawab://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokkr
1
Alih-alih menonaktifkan gambar responsif, Anda harus mencari apa yang mencampur HTTP dan HTTPS karena fungsionalitas gambar responsif bukanlah asal masalah. Semua situs web saya berada di bawah HTTPS dan srcsetdibuat dengan benar oleh WordPress. Bagaimana Anda bermigrasi dari HTTP ke HTTPS?
cybmeta
Lihat core.trac.wordpress.org/ticket/25449 .
Artem Russakovskii
Sepertinya sudah cukup beres sekarang. Permintaan maaf untuk posting ganda - masalah root (srcset harus menggunakan https) juga diselesaikan di utas yang saya mulai di wordpress.org ( wordpress.org/support/topic/… ) jadi ketika dihidupkan kembali. Terima kasih kepada joemcgill yang menyelesaikannya di sana.
brokkr

Jawaban:

43

Berikut adalah beberapa hal yang dapat Anda coba untuk menghapus dukungan gambar responsif di 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' );

tetapi seperti yang disebutkan oleh @cybmeta masalahnya mungkin di tempat lain.

Paksa https aktif srcset

Anda dapat melakukan debugging dengan wp_calculate_image_srcsetfilter dan bahkan mencoba perbaikan cepat ini :

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

untuk mengatur skema url ke https. Pendekatan lain adalah dengan membuatnya licik //.

Lihat Codex untuk set_url_scheme()opsi lain :

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

Tetapi Anda harus mencoba menggali lebih dalam dan menemukan akar masalahnya.

Memperbarui:

Kami dapat melakukan bail out lebih awal dari wp_calculate_image_srcset()fungsi dengan:

add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );

lalu gunakan filter wp_calculate_image_srcsetatau max_srcset_image_width.

Juga diperbarui sesuai dengan tiket # 41895 , untuk mengembalikan array kosong, bukan false / null.

birgire
sumber
Hanya untuk mengonfirmasi bahwa kedua pendekatan berfungsi karena masing-masing ditujukan untuk saya, srcset penonaktifan menghapus srcset (dan dengan demikian mengembalikan gambar 'diperbaiki') dan gaya https mengubah url srcset menjadi https. Kedua pendekatan menghapus peringatan konten campuran.
brokkr
4
The add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );solusi bekerja besar bagi saya. Terima kasih!
Tim Bowen
Senang mendengarnya membantu.
birgire
Ini akan menyebabkan peringatan pada validator: "Atribut ukuran hanya dapat ditentukan jika atribut srcset juga ada."
Michael Rogers
Sepertinya Anda telah memfilter srcset tetapi bukan atribut ukuran. @MichaelRogers
birgire
13

Cara paling sederhana dan paling bersih untuk melakukan ini hanyalah ini:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Untuk menggemakan apa yang dikatakan kebanyakan orang lain, srcset adalah ide yang bagus dan masa depan (praktik terbaik sekarang), tetapi jika Anda memerlukan perbaikan cepat untuk menjaga situs Anda berfungsi, cuplikan di atas melakukan pekerjaan tanpa peretasan.

sumber: WP Core Blog

Trevor
sumber
5
Cukup gunakan __return_falsealih-alih disable_srcset, wp memiliki fungsi untuk tugas-tugas sederhana seperti itu.
Jake
3
Dan Anda berdua dapat meningkatkan kode Anda dengan tidak membuat fungsi yang sama sekali baru hanya untuk mengembalikan false. WordPress menyediakan fungsi untuk melakukan itu. codex.wordpress.org/Function_Reference/_return_false
Jake
1
Ini solusi yang tepat. Fitur ini juga dipikirkan sebagai wp_autop. Saya menggunakan <picture> untuk mendapatkan arahan seni serta gambar responsif, dan ini tidak mengatasinya.
Peter Wooster
1
@Buat pada skala 1 hingga 10, "membuat fungsi baru hanya untuk mengembalikan false" menambahkan sekitar -2 mengasapi WordPress. Mendokumentasikan sendiri kode yang dapat dipahami oleh siapa saja (bukan hanya WP WP) memiliki nilai tertentu.
Mahmoud Al-Qudsi
1
@ MahmoudAl-Qudsi Karena '__return_false' sangat membingungkan? Diskusi ini, di forum WordPress, adalah tentang mematikan fitur WordPress. Tidak gila hanya menggunakan default, sangat dasar dan didokumentasikan dengan baik, WordPress mengembalikan fungsi bawaan ke WordPress untuk melakukan itu. Fakta bahwa fungsi ini bernama "return_false" cukup mendokumentasikan diri. Coba dan tebak apa fungsinya?
Jake
7

Kemungkinan besar, alasan URL dalam srcsetatribut Anda salah menampilkan HTTPS adalah karena URL untuk semua gambar dibuat menggunakan nilai opsi siteurl di tabel wp_options Anda. Jika Anda melayani ujung depan Anda di atas HTTPS, Anda juga harus mengubah nilai-nilai itu (melalui Pengaturan> Umum).

Inilah tiket terkait pada sistem pelacakan masalah WordPress: https://core.trac.wordpress.org/ticket/34945

joemcgill
sumber
5

Ini akan menonaktifkan kode srcset dengan menghilangkan gambar yang lebih lebar dari 1 piksel.

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

Dalam jangka panjang, Anda harus mencoba memperbaiki masalah yang sebenarnya. Namun, ini berfungsi jika Anda perlu perbaikan cepat.

Otto
sumber
1
create_function()
Pieter Goosen
1
Bagaimana dengan create_function ()? Saya suka jawaban saya untuk bekerja di PHP 5.2 juga.
Otto
2

Di Pengaturan / Umum, pastikan Alamat WordPress Anda (URL) dan Alamat Situs (URL) diatur ke https://yourdomain.com

Lihat http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4- saat-menggunakan-ssl

Joe McGill, yang membantu memimpin upaya untuk mendapatkan gambar responsif ke WordPress, juga menanggapi di utas forum dan mengkonfirmasi bahwa saran Cree benar, “Jika Anda menjalankan HTTPS di ujung depan, Anda harus mengubah URL untuk rumah dan situs Anda URL di Pengaturan> Umum sehingga mereka menggunakan skema HTTPS, ”katanya.

user2969141
sumber