ลบหรืออัปเดต add_image_size


16

ฉันกำลังทำงานกับชุดรูปแบบที่มีการกำหนดขนาดรูปภาพอย่างถูกต้องโดยใช้:

add_image_size( 'name', 500, 200, true );

ฉันต้องการแทนที่ขนาดที่กำหนดเหล่านี้จากธีมลูก:

add_image_size( 'new-name', 400, 300, true );

ฉันรู้ว่าฉันสามารถเพิ่มขนาดใหม่ แต่ถ้าฉันเพิ่มชื่อเดียวกันเช่น:

add_image_size( 'name', 400, 300, true );

จากนั้นจะใช้การเรียกฟังก์ชันหลัก - ลูกที่ถูกละเว้น - การเพิ่มกฎพิเศษเพิ่มรูปภาพเพิ่มเติมซึ่งจะไม่ถูกนำมาใช้ - มันไม่เลวเลย แต่ก็ไม่มีประสิทธิภาพ

มีฟังก์ชั่นเพื่อยกเลิกการลงทะเบียนขนาดภาพที่เพิ่มเข้ามาหรือไม่?

ไชโย!

รังสี


คุณช่วยกรุณาโพสต์รหัสทั้งหมดที่เกี่ยวข้องได้ไหม มีการadd_image_size()โทรเพียงแค่นั่งเปล่าfunctions.phpๆ หรือแนบไปกับการโทรกลับอย่างถูกต้องafter_setup_themeหรือไม่ การรู้ว่าสิ่งใดสำคัญต่อการตอบคำถามของคุณ
Chip Bennett

สวัสดีชิ - ขอบคุณสำหรับความคิดเห็นของคุณ - คุณพูดถูกมันห่อด้วย after_setup_theme ดังนั้นนี่คือสิ่งที่สำคัญอีกครั้ง - ฉันคิดถึงมันเสมอ!
Q Studio

คำตอบ:


22

ฟังก์ชั่นเป็นพอสง่างามจัดการกับหลายสายโดยใช้แบบเดียวกันadd_image_size( $name, $width, $height, $crop ) $nameมันเพียงเขียนทับค่าที่มีอยู่ :

$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );

ดังนั้นหมายความว่าสิ่งที่คุณต้องทำเพื่อแทนที่คำนิยามธีมของผู้ปกครองของขนาดของภาพที่กำหนดเองเพื่อให้แน่ใจว่าการเรียกร้องให้add_image_size()เกิดเพลิงไหม้หลังจากโทรธีมของผู้ปกครอง

สมมติว่าธีมผู้ปกครองทำเช่นนั้น:

function parent_theme_setup() {
    add_image_size( 'name', 500, 200, true );
    add_image_size( 'new-name', 400, 300, true );
}
add_action( 'after_setup_theme', 'parent_theme_setup' );

จากนั้นการadd_image_size()โทรของธีมหลักจะเริ่มขึ้นที่after_setup_themehook ตามลำดับความสำคัญเริ่มต้น (เช่น10)

(หมายเหตุ: หากการโทรไม่ได้อยู่ในการโทรกลับการโทรนั้นจะทำการplugins_loadedแฮ็กที่ระดับความสำคัญ10)

นี่คือส่วนที่สำคัญ: ไฟล์ของชุดรูปแบบเด็กfunctions.phpจะถูกวิเคราะห์ก่อนชุดรูปแบบหลักดังนั้นหากคุณใช้ hooks ตัวเดียวกันเพื่อเริ่มการadd_image_size()โทรของคุณพวกเขาจะถูกแทนที่ด้วยการadd_image_size()เรียกชุดรูปแบบของผู้ปกครอง

วิธีแก้ไขคือใช้ hook ในภายหลังหรือลำดับความสำคัญที่ต่ำกว่าเพื่อให้แน่ใจว่าการadd_image_size()เรียกชุดรูปแบบของเด็กจะเริ่มทำงานหลังจากชุดรูปแบบหลัก

สิ่งนี้ควรทำเคล็ดลับไม่ว่าธีมหลักจะโทรออกอย่างไร:

function child_theme_setup() {
    add_image_size( 'name', 400, 300, true );
}
add_action( 'after_setup_theme', 'child_theme_setup', 11 );

โปรดทราบว่าเราใช้after_setup_themehook เดียวกันแต่ใช้ลำดับความสำคัญต่ำกว่า (เช่น11แทนcallbacks จะเริ่มทำงานตาม10ลำดับความสำคัญที่สูงขึ้น (หมายเลขที่ต่ำกว่า) ไปยังลำดับความสำคัญที่ต่ำกว่า (หมายเลขที่สูงกว่า) เริ่มต้นด้วยลำดับความสำคัญโทรกลับติดยาเสพติดเข้ามาในลำดับความสำคัญ01110

ยังทราบว่าafter_setup_themeเบ็ดตัวเองยิงหลังจากplugins_loadedเบ็ดเพื่อโทรกลับนี้จะยังคงแทนที่ธีมแม่แม้ว่าธีมผู้ปกครอง_doing_it_wrong()โดยไม่ได้ตัดสายดังกล่าวในการเรียกกลับที่เหมาะสมติดยาเสพติดเข้ามาในเบ็ดที่เหมาะสม


ยอดเยี่ยม - ขอบคุณชิป! - ฉันมีพวกเขาทั้งสองในลำดับความสำคัญเดียวกัน - หยักเด็กกลับมาหลังจากที่พ่อแม่และทำงานได้ดี
Q Studio

ฉันไม่สามารถเขียนทับค่าหากปลั๊กอินเรียกใช้ add_image_size :(
Zhianc

1

หากมีคนต้องการยกเลิกการตั้งขนาดภาพเพิ่มเติมซึ่งต่างจากการเปลี่ยนขนาดให้ใช้remove_image_size (string $ name)เช่น

function pinboard_child_theme_setup( $sizes) {

    $image_size_names = array('thumbnail', 'medium', 'large',
        'slider-thumb', 'blog-thumb', 'teaser-thumb', 'gallery-1-thumb',
        'gallery-2-thumb', 'gallery-3-thumb', 'image-thumb', 'video-thumb');

    $image_size_names_length = count($image_size_names);
    for($x = 0; $x < $image_size_names_length; $x++) {
        remove_image_size($image_size_names[$x]);
    }   
}
add_action( 'after_setup_theme', 'pinboard_child_theme_setup', 11);

-1

ในชุดรูปแบบชิลีของคุณคุณจะต้องใช้ add_action( 'after_setup_theme','new-name');


ชื่อใหม่ที่นี่เป็นชื่อของฟังก์ชั่นหรือสิ่งที่เคยชื่อที่คุณใช้สำหรับฟังก์ชั่นหลักของคุณ
robin

เพิ่มคำอธิบายให้กับคำตอบของคุณ: ทำไมและมันแก้ปัญหาได้อย่างไร? โปรดทราบว่าnew-nameเป็นชื่อการโทรกลับที่ไม่ถูกต้อง
fuxia

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