วิธีกำหนดขนาดภาพขั้นต่ำสำหรับการอัพโหลด


17

ฉันต้องการวิธีที่จะ จำกัด ผู้แต่งไม่ให้อัปโหลดรูปภาพที่มีขนาดเฉพาะ

สมมติว่าฉันต้องการอนุญาตให้อัปโหลดภาพที่มีขนาดอย่างน้อย 400px x 400px หากขนาดภาพเล็กกว่านี้ผู้แต่งควรได้รับการแจ้งข้อผิดพลาดว่าภาพนั้นเล็กเกินไป

มีปลั๊กอินหรือรหัสที่สามารถทำสิ่งนี้ได้หรือไม่?

คำตอบ:


25

เพิ่มรหัสนี้ลงในฟังก์ชั่นของธีมของคุณไฟล์และจะ จำกัด การวางภาพขั้นต่ำ

add_filter('wp_handle_upload_prefilter','tc_handle_upload_prefilter');
function tc_handle_upload_prefilter($file)
{

    $img=getimagesize($file['tmp_name']);
    $minimum = array('width' => '640', 'height' => '480');
    $width= $img[0];
    $height =$img[1];

    if ($width < $minimum['width'] )
        return array("error"=>"Image dimensions are too small. Minimum width is {$minimum['width']}px. Uploaded image width is $width px");

    elseif ($height <  $minimum['height'])
        return array("error"=>"Image dimensions are too small. Minimum height is {$minimum['height']}px. Uploaded image height is $height px");
    else
        return $file; 
}

จากนั้นเพียงเปลี่ยนจำนวนมิติข้อมูลขั้นต่ำที่คุณต้องการ (ในตัวอย่างของฉันคือ 640 และ 480)


ขอบคุณ! มีวิธีใดบ้างที่จะไม่ใช้ฟังก์ชั่นนี้หากเรารวมภาพขนาดย่อของโพสต์ไว้ด้วย?
Arthur Dos Santos Dias

สิ่งนี้จะทำงานทุกครั้งเมื่อคุณอัปโหลดไฟล์ในขั้นตอนยังคงเป็นเพียงไฟล์ก่อนที่คุณจะจัดหมวดหมู่หรือกำหนดเป็นภาพขนาดย่อ คุณสามารถเพิ่มเงื่อนไขตามชื่อของไฟล์ด้วยคำนำหน้า / คำต่อท้ายที่คุณเลือกและตั้งชื่อรูปขนาดย่อของคุณให้เป็นไฟล์โดยสิ่งนี้ห้ามใช้ฟังก์ชั่นหากชื่อไฟล์ตรงกับเงื่อนไขนั้น
Maor Barazany

การอ้างอิงบรรทัดที่ 14 ต้องมี "width" แทนที่ด้วย "height" แต่อย่างอื่นนี่คือสิ่งที่ฉันต้องการ

11

ฉันไม่ต้องการฟอร์แมตรหัสของเพื่อนร่วมงานอีก
ดังนั้นนี่เป็นคำตอบเดียวกับ @ MaorBarazany แต่การตรวจสอบประเภท mime เป็นการเปลี่ยนfile['error']ประกาศและเปลี่ยน namespace ของฟังก์ชั่นเป็น ID คำถาม wpse นี้

นอกจากนี้การตรวจสอบจะเกิดขึ้นกับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบเท่านั้น

add_action( 'admin_init', 'wpse_28359_block_authors_from_uploading_small_images' );

function wpse_28359_block_authors_from_uploading_small_images()
{
    if( !current_user_can( 'administrator') )
        add_filter( 'wp_handle_upload_prefilter', 'wpse_28359_block_small_images_upload' ); 
}

function wpse_28359_block_small_images_upload( $file )
{
    // Mime type with dimensions, check to exit earlier
    $mimes = array( 'image/jpeg', 'image/png', 'image/gif' );

    if( !in_array( $file['type'], $mimes ) )
        return $file;

    $img = getimagesize( $file['tmp_name'] );
    $minimum = array( 'width' => 640, 'height' => 480 );

    if ( $img[0] < $minimum['width'] )
        $file['error'] = 
            'Image too small. Minimum width is ' 
            . $minimum['width'] 
            . 'px. Uploaded image width is ' 
            . $img[0] . 'px';

    elseif ( $img[1] < $minimum['height'] )
        $file['error'] = 
            'Image too small. Minimum height is ' 
            . $minimum['height'] 
            . 'px. Uploaded image height is ' 
            . $img[1] . 'px';

    return $file;
}

ผลลัพธ์ของ hook:

การอัปโหลดภาพที่ถูกบล็อก


รักสิ่งนี้และมันใช้งานได้เหมือนมีเสน่ห์ อย่างไรก็ตามมีปัญหาหนึ่งคือ: ถ้าฉันต้องการใช้ตัวกรองนี้เฉพาะกับโพสต์บางประเภทผู้ใช้ยังสามารถเลือกรูปภาพจาก Media Library ที่อัปโหลดในโพสต์ประเภทอื่น (โดยไม่ต้องมีขนาด) ซึ่งไม่เป็นไปตามข้อกำหนดเหล่านี้
cfx

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