ฉันจะปิดใช้งานอิมเมจที่ตอบสนองได้ใน WP 4.4 ได้อย่างไร


37

ฉันแปลงการติดตั้ง 4.3.1 เป็น https ทั้งหมดอย่างสมบูรณ์ หลังจากอัปเดตเป็น 4.4 ฉันมีปัญหากับsrcsetคุณสมบัติใหม่ ในขณะที่srcตั้งค่าแอตทริบิวต์สำหรับรูปภาพโดยใช้ https srcsetแอตทริบิวต์นั้นคือ http ทำให้เบราว์เซอร์ไม่แสดงรูปภาพใด ๆ เลย

ในขณะที่รอการแก้ไขที่ดีกว่าฉันต้องการปิดการใช้งานการตั้งค่าsrcsetคุณลักษณะทั้งหมดเพื่อให้ทุกภาพมีเพียงsrcคุณลักษณะ ฉันจะทำอย่างไร


2
ฉันก็อยากจะรู้เรื่องนี้ - มันเพิ่งจะเป็นระเบียบของเว็บไซต์ของเรา!
Chris

ฉันได้ลองวิธีการต่าง ๆ โดยไม่ประสบความสำเร็จ แต่ฉันอยากจะทิ้งคำถามหลักไว้กับแนวทางใหม่ ๆ ความพยายามที่รุนแรงที่สุดของฉันคือการแสดงความคิดเห็นadd_filterในเรื่องนี้default-filters.phpฉันเชื่อว่าจะต้องรับผิดชอบ://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokkr

1
แทนที่จะปิดใช้งานอิมเมจที่ตอบสนองต่อคุณควรมองหาสิ่งที่กำลังผสม HTTP และ HTTPS เพราะฟังก์ชั่นอิมเมจที่ตอบสนองไม่ใช่ต้นกำเนิดของปัญหา เว็บไซต์ของฉันทั้งหมดอยู่ภายใต้ HTTPS และsrcsetสร้างขึ้นอย่างถูกต้องโดย WordPress คุณย้ายจาก HTTP ไปยัง HTTPS อย่างไร
cybmeta

ดูcore.trac.wordpress.org/ticket/25449
Artem Russakovskii

ดูเหมือนว่าคุณจะยินดีอย่างยิ่งในตอนนี้ การขอโทษสำหรับการโพสต์ซ้ำ - ปัญหารูท (srcset ควรใช้ https) ก็แก้ไขได้ในเธรดที่ฉันเริ่มต้นที่ wordpress.org ( wordpress.org/support/topic/ … ) ในการป้องกันของฉันเธเธดูเหมือนว่าสวยตายหลังจากผ่านไปหนึ่งวันหรือ ดังนั้นเมื่อมันฟื้นขึ้นมา ขอบคุณ joemcgill ที่แก้ไขมันตรงนั้น
brokkr

คำตอบ:


43

นี่คือบางสิ่งที่คุณสามารถลองลบการสนับสนุนรูปภาพที่ตอบสนองได้ใน 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' );

แต่ดังที่ @cybmeta กล่าวถึงปัญหาอาจอยู่ที่อื่น

บังคับให้เปิดใช้ https srcset

คุณสามารถทำการดีบักบางอย่างกับwp_calculate_image_srcsetตัวกรองและลองใช้การแก้ไขด่วนนี้:

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

การตั้งค่ารูปแบบ URLhttpsที่จะ อีกวิธีหนึ่งที่จะมีมัน //schemeless

ลองดู Codex เพื่อดูset_url_scheme()ตัวเลือกอื่น ๆ:

$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_empty_array' );

จากนั้นใช้ตัวกรองwp_calculate_image_srcsetหรือmax_srcset_image_width

อัพเดตด้วยตามตั๋ว# 41895เพื่อส่งคืนอาร์เรย์ว่างแทน false / null


เพียงเพื่อยืนยันว่าวิธีการทั้งสองทำงานตามที่ตั้งใจไว้สำหรับฉันการปิดใช้งาน srcset ลบ srcset (และนำรูปภาพ 'คงที่' กลับมา) และแรง https เปลี่ยน srcset urls เป็น https ทั้งสองวิธีนำการแจ้งเตือนเนื้อหาแบบผสมออก
brokkr

4
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );วิธีการแก้ปัญหาการทำงานที่ดีสำหรับฉัน ขอขอบคุณ!
Tim Bowen

ดีใจที่ได้ยินมันช่วย
Birgire

สิ่งนี้จะทำให้เกิดคำเตือนเกี่ยวกับตัวตรวจสอบความถูกต้อง: "อาจมีการระบุขนาดแอตทริบิวต์เฉพาะเมื่อแอตทริบิวต์ srcset ยังปรากฏอยู่"
Michael Rogers

ดูเหมือนว่าคุณได้กรอง srcset แล้ว แต่ไม่ใช่ขนาดแอตทริบิวต์ @MichaelRogers
birgire

13

วิธีที่ง่ายและสะอาดที่สุดในการทำเช่นนี้คือ:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

เพื่อสะท้อนสิ่งที่คนอื่นส่วนใหญ่พูดแม้ว่า srcset เป็นความคิดที่ดีและเป็นอนาคต (แนวปฏิบัติที่ดีที่สุดในตอนนี้) แต่ถ้าคุณต้องการการแก้ไขอย่างรวดเร็วเพื่อให้ไซต์ของคุณทำงานต่อไปข้อมูลโค้ดด้านบนทำงานได้โดยไม่แฮ็ค

แหล่งที่มา: WP Core Blog


5
เพียงใช้__return_falseแทนdisable_srcsetwp มีฟังก์ชั่นสำหรับงานง่าย ๆ เช่นนั้น
Jake

3
และคุณทั้งคู่สามารถปรับปรุงโค้ดของคุณโดยไม่สร้างฟังก์ชั่นใหม่ทั้งหมดเพื่อคืนค่าเท็จ WordPress มีฟังก์ชั่นการทำเช่นนั้น codex.wordpress.org/Function_Reference/_return_false
Jake

1
นี่คือทางออกที่ถูกต้อง คุณลักษณะนี้เกี่ยวกับ wp_autop ฉันใช้ <รูปภาพ> เพื่อให้ได้ทิศทางศิลปะและรูปภาพที่ตอบสนองได้และนี่ก็ไม่ได้หมายความว่าจะเป็นเช่นนั้น
Peter Wooster

1
@ เจคในระดับ 1 ถึง 10 "การสร้างฟังก์ชั่นใหม่เพื่อคืนค่าเท็จ" เพิ่มประมาณ -2 bloat สู่ WordPress รหัสการทำเอกสารด้วยตนเองที่ทุกคน (ไม่ใช่แค่ WP dev) สามารถเข้าใจได้ว่ามีค่าที่แน่นอน
Mahmoud Al-Qudsi

1
@ MahmoudAl-Qudsi เพราะ '__return_false' นั้นช่างสับสนงั้นเหรอ? การสนทนานี้ในฟอรัม WordPress เป็นเรื่องเกี่ยวกับการปิดคุณสมบัติ WordPress มันไม่ได้บ้าเพียงแค่ใช้ค่าเริ่มต้นพื้นฐานและมีเอกสารที่ดี WordPress กลับฟังก์ชั่นในตัวของ WordPress เพื่อทำเช่นนั้น ความจริงที่ว่าฟังก์ชั่นนี้มีชื่อว่า "return_false" นั้นเป็นเอกสารที่ค่อนข้างดี ลองและเดาว่ามันทำอะไร?
Jake

7

เป็นไปได้มากว่าเหตุผลที่ URL ในsrcsetแอตทริบิวต์ของคุณแสดง HTTPS ไม่ถูกต้องเป็นเพราะ URL สำหรับรูปภาพทั้งหมดถูกสร้างขึ้นโดยใช้ค่าของตัวเลือก siteurl ในตาราง wp_options ของคุณ หากคุณให้บริการส่วนหน้าของคุณเหนือ HTTPS คุณควรเปลี่ยนค่าเหล่านั้น (ผ่านการตั้งค่า> ทั่วไป)

นี่คือตั๋วที่เกี่ยวข้องในระบบติดตามปัญหา WordPress: https://core.trac.wordpress.org/ticket/34945


5

วิธีนี้จะปิดใช้งานรหัส srcset โดยกำจัดภาพใด ๆ ที่กว้างเกิน 1 พิกเซล

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

ในระยะยาวคุณควรลองแก้ไขปัญหาจริง ยังใช้งานได้หากคุณต้องการการแก้ไขอย่างรวดเร็ว



1
สิ่งที่เกี่ยวกับ create_function ()? ฉันชอบคำตอบสำหรับการทำงานใน PHP 5.2 ด้วย
อ็อตโต

2

ในการตั้งค่า / ทั่วไปให้แน่ใจว่าที่อยู่ WordPress (URL) และที่อยู่ไซต์ (URL) ของคุณถูกตั้งค่าเป็นhttps://yourdomain.com

ดูhttp://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-while-using-ssl

Joe McGill ผู้ช่วยนำความพยายามในการรับภาพที่ตอบสนองต่อ WordPress มาตอบในกระทู้ในฟอรัมและยืนยันว่าคำแนะนำของ Cree ถูกต้อง“ ถ้าคุณใช้ HTTPS ในส่วนหน้าคุณควรเปลี่ยน URLS สำหรับบ้านและเว็บไซต์ของคุณ URL ในการตั้งค่า> ทั่วไปเพื่อให้พวกเขาใช้รูปแบบ HTTPS” เขากล่าว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.