อัพโหลดรูปภาพจาก URL


20

ฉันชอบวิธีที่ SE อัปโหลดภาพจาก URL (ฉันแน่ใจว่าหลายคนทำ!) ฉันค้นหาแล้ว แต่หาไม่พบมีปลั๊กอินหรือวิธีการคล้ายกับที่มีใน WordPress หรือไม่

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

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นคุณสมบัติที่ยอดเยี่ยม แต่ไม่เป็นที่รู้จักอย่างกว้างขวาง (จริง ๆ แล้วฉันเพิ่งค้นพบมัน) ฉันต้องการบางสิ่งเพิ่มเติมเช่น SE ซึ่งมีตัวเลือกที่ให้ผู้ใช้ทราบเพื่อเพิ่ม URL รูปภาพ

ฉันจะเพิ่มฟิลด์ไฟล์ที่อัปโหลดไปยังแท็บใหม่ในเครื่องมืออัปโหลดสื่อได้อย่างไร

นี่คือการสอนวิธีเพิ่มแท็บใหม่ในหน้า Media Upload ใน wordpressแต่ฉันต้องการเพิ่มข้อความและฟิลด์อัพโหลดไฟล์ในแท็บนั้นเท่านั้น ความคิดใด ๆ ฉันไม่พบสิ่งใดใน WordPress Codex ที่เกี่ยวข้องกับคุณลักษณะนี้หรือฟิลด์อัปโหลดไฟล์โดยตรง

ขอบคุณ


คำขอคุณสมบัติอยู่ใน trac.wordpress.org
Wyck

2
ไม่ใช่คำขอคุณสมบัติ คุณลักษณะนี้สร้างขึ้นแล้ว
Travis Pflanz

@TravisPflanz มาสำหรับ Windows และคิดว่ามันเป็นอัจฉริยะ - ปรับปรุงขั้นตอนการทำงานของฉัน รู้หรือไม่ว่าจะทำเช่นนั้นใน Mac command + shift + g ดูเหมือนจะไม่สนับสนุน URL แต่ไม่แน่ใจว่ามีคำสั่งอื่นหรือไม่
user658182

ข้อดีของการอัปโหลดจาก url เหนือ "enter url ใน windows filemanager" คือไฟล์นั้นโหลดโดยตรงจากแหล่งข้อมูลไปยังเซิร์ฟเวอร์ wordpress ในกรณีของฉันผ่านทางศูนย์ศูนย์โฮสติ้งไลน์กิกะบิตแทนที่จะถูกดาวน์โหลดไปยังพีซีของฉันก่อนแล้วจึงไปจนถึง WordPress ผ่านการเชื่อมต่อมือถือที่ช้า
Lenne

เคล็ดลับในการ 'อัปโหลด' โดยตรงจาก URL ไม่ทำงานใน Windows 10 (ในเบราว์เซอร์ - ทดสอบ Firefox, Chrome, IE11) และอาจไม่ทำงานใน Windows รุ่นก่อนหน้าตั้งแต่ปี 2012 Windows จะดาวน์โหลดไฟล์จาก URL ไปยังตำแหน่งชั่วคราวบนคอมพิวเตอร์ของคุณและอัปโหลดจากที่นั่น ดังนั้นจึงเป็นไปไม่ได้ที่จะใช้เคล็ดลับนี้เพื่อ 'อัปโหลด' ไฟล์วิดีโอขนาดใหญ่ (เพื่อหลีกเลี่ยงการตอบสนองHTTP 413ของผู้ให้บริการโฮสติ้งก่อน PHP และ WordPress แม้จะได้รับการค้นหา)
Jake

คำตอบ:


24

คุณสามารถเขียนสคริปต์ PHP หรือสร้างปลั๊กอินของคุณเองที่นี่ฉันใช้มันในหนึ่งในโครงการของฉันที่ฉันต้องนำเข้าภาพจำนวนมาก

ก่อนอื่นรับภาพและเก็บไว้ใน upload-directory ของคุณ:

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $filename;

$contents= file_get_contents('http://mydomain.com/folder/image.jpg');
$savefile = fopen($uploadfile, 'w');
fwrite($savefile, $contents);
fclose($savefile);

หลังจากนั้นเราสามารถแทรกรูปภาพลงในไลบรารีสื่อ:

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => $filename,
    'post_content' => '',
    'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $uploadfile );

$imagenew = get_post( $attach_id );
$fullsizepath = get_attached_file( $imagenew->ID );
$attach_data = wp_generate_attachment_metadata( $attach_id, $fullsizepath );
wp_update_attachment_metadata( $attach_id, $attach_data );

และ voila - ไปเลย คุณยังสามารถตั้งค่าพารามิเตอร์อื่น ๆ อีกมากมายในอาร์เรย์สิ่งที่แนบ หากคุณมี URL หรืออะไรทำนองนั้นคุณสามารถเรียกใช้สคริปต์แบบวนซ้ำได้ แต่โปรดทราบว่าฟังก์ชั่นภาพใช้เวลาและหน่วยความจำนานในการดำเนินการ


โอ้ฉันขอโทษฉันไม่เห็นภาพในตอนแรก บางทีฉันอาจจะเขียนปลั๊กอินขนาดเล็กทำสิ่งนี้ ฉันหวังว่าคุณจะสามารถเข้ากับสคริปต์ของฉันได้ - ฉันจะให้คุณโพสต์ในข่าวปลั๊กอิน
fischi

ฉันคิดว่าฉันเพิ่มภาพเช่นเดียวกับที่คุณโพสต์ ฉันจะมองลึก ๆ เมื่อฉันกลับจากอาหารกลางวัน ขอบคุณสำหรับความช่วยเหลือของคุณ! ชื่นชมเสมอ
เทรวิส Pflanz

การใช้file_get_contentsกับ URL จะไม่ทำงานหากallow_url_fopenปิดการใช้งานในphp.ini- wp_remote_getจะเข้ากันได้สูงขึ้นในสภาพแวดล้อม WP ที่แตกต่างกัน
highvolt

สวัสดีครับขอบคุณสำหรับคำตอบสำหรับสิ่งที่เป็นwp_generate_attachment_metadataและwp_update_attachment_metadata?
gdfgdfg

12

คุณสามารถใช้ฟังก์ชั่นและdownload_url()wp_handle_sideload()

download_url()

ดาวน์โหลด URL ไปยังไฟล์ชั่วคราวในเครื่องโดยใช้ WordPress HTTP Class โปรดทราบว่าฟังก์ชั่นการโทรจะต้องยกเลิกการเชื่อมโยง () ไฟล์

wp_handle_sideload()

จัดการ sideloads ซึ่งเป็นกระบวนการดึงรายการสื่อจากเซิร์ฟเวอร์อื่นแทนการอัปโหลดสื่อดั้งเดิม กระบวนการนี้เกี่ยวข้องกับการฆ่าเชื้อชื่อไฟล์การตรวจสอบส่วนขยายสำหรับชนิด mime และย้ายไฟล์ไปยังไดเรกทอรีที่เหมาะสมภายในไดเรกทอรีอัพโหลด

ตัวอย่าง:

// Gives us access to the download_url() and wp_handle_sideload() functions
require_once( ABSPATH . 'wp-admin/includes/file.php' );

// URL to the WordPress logo
$url = 'http://s.w.org/style/images/wp-header-logo.png';
$timeout_seconds = 5;

// Download file to temp dir
$temp_file = download_url( $url, $timeout_seconds );

if ( !is_wp_error( $temp_file ) ) {

    // Array based on $_FILE as seen in PHP file uploads
    $file = array(
        'name'     => basename($url), // ex: wp-header-logo.png
        'type'     => 'image/png',
        'tmp_name' => $temp_file,
        'error'    => 0,
        'size'     => filesize($temp_file),
    );

    $overrides = array(
        // Tells WordPress to not look for the POST form
        // fields that would normally be present as
        // we downloaded the file from a remote server, so there
        // will be no form fields
        // Default is true
        'test_form' => false,

        // Setting this to false lets WordPress allow empty files, not recommended
        // Default is true
        'test_size' => true,
    );

    // Move the temporary file into the uploads directory
    $results = wp_handle_sideload( $file, $overrides );

    if ( !empty( $results['error'] ) ) {
        // Insert any error handling here
    } else {

        $filename  = $results['file']; // Full path to the file
        $local_url = $results['url'];  // URL to the file in the uploads dir
        $type      = $results['type']; // MIME type of the file

        // Perform any actions here based in the above results
    }

}

ฉันใช้รหัสนี้และเพิ่มรูปภาพในไดเรกทอรีอัพโหลดสำเร็จแล้ว แต่เมื่อฉันไปที่ Media Library ของฉันในแบ็กเอนด์ Wordpress ฉันไม่สามารถค้นหาได้ทุกที่และไม่ปรากฏขึ้นในการค้นหา ฉันทำให้แน่ใจว่ามีสิทธิ์ที่ถูกต้อง แต่ก็ยังไม่โชค ด้วยเหตุผลใดก็ตามมันจะไม่ปรากฏขึ้น?
Nick

มันจะไม่เพิ่มรายการในด้านผู้ดูแลระบบ หากคุณต้องการเพิ่มรายการในผู้ดูแลระบบคุณควรใช้ wp_insert_attachment (); codex.wordpress.org/Function_Reference/wp_insert_attachment หรือคุณสามารถใช้มันได้โดยการดัดแปลงตัวแปรโกลบอล $ _FILES media_handle_upload (); codex.wordpress.org/Function_Reference/media_handle_upload
Rajilesh Panoli

มันใช้งานไม่ได้เลย
Cameron A

5

ไดเรกทอรีปลั๊กอิน WordPress - คว้าและบันทึก

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

หลังจากคว้าภาพ wordpress จะแจ้งให้คุณทั้ง "แทรกในโพสต์" หรือ "เปลี่ยนคุณสมบัติ" เช่นเดียวกับหลังจากที่คุณอัปโหลดภาพ


1

มีอย่างน้อยสามวิธีในการนำเข้ารูปภาพจากระยะไกลสู่ WordPress:

  1. หยิบและบันทึกปลั๊กอินซึ่งถูกกล่าวถึงในคำตอบอื่น ๆ ปลั๊กอินนี้ค่อนข้างเก่าและจะบันทึกไฟล์โดยตรงดังนั้นภาพขนาดเล็กที่มีขนาดแตกต่างกันจะไม่ถูกสร้างขึ้น อัปเดตครั้งล่าสุดเมื่อ 2 ปีก่อนในขณะที่เขียน

  2. ปลั๊กอินนำเข้ารูปภาพภายนอกมีการนำเข้าจำนวนมากสำหรับรูปภาพที่เชื่อมโยงระยะไกล คุณอาจต้องเพิ่มขีด จำกัด หน่วยความจำ PHP เพื่อให้สิ่งนี้ทำงานได้ อัปเดตครั้งล่าสุดเมื่อ 2 ปีก่อนในขณะที่เขียน

  3. บันทึกและนำเข้าภาพจากปลั๊กอิน URLนำเข้าภาพโดยใช้ฟังก์ชั่นดั้งเดิมดังนั้นมันจึงถูกสร้างขึ้นอย่างถูกต้องในแกลเลอรี่สื่อและรูปขนาดย่อทั้งหมดถูกสร้างขึ้นมา ปลั๊กอินนี้ได้รับการปรับปรุงล่าสุดในปี 2559 และใช้งานได้กับ WordPress 4.7

การเปิดเผย: ฉันสร้างรูปภาพบันทึก & นำเข้าจากปลั๊กอิน URL

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