รับภาพทางโปรแกรมโดย URL และบันทึกในโฟลเดอร์อัพโหลด


14

ฉันเกี่ยวข้องกับการย้ายข้อมูลขนาดใหญ่จาก CMS อื่นไปยัง WordPress เรามีสำเนาของฐานข้อมูลและได้ทำการแยกเนื้อหาและสร้างโพสต์ WordPress โดยทางโปรแกรมโดยใช้อินสแตนซ์ของwpdbคลาส

อย่างไรก็ตามมีสองสามพันภาพที่เราต้องการดึงโดยอัตโนมัติสร้างขนาดต่าง ๆ แล้วแนบไปกับโพสต์เพื่อประหยัดงานประมาณหนึ่งสัปดาห์!

มีวิธีที่ฉันสามารถรับรูปภาพจากไซต์ระยะไกลด้วย URL และบันทึกไว้ในโฟลเดอร์ wp-uploads ของฉันหรือไม่ ฉันเดาว่ามันใช้wp_httpแต่ฉันไม่คุ้นเคยกับสิ่งนั้น

เมื่อฉันได้ภาพและบันทึกแล้วฉันก็ใช้ได้เพราะฉันสามารถใช้wp_generate_attachment_metadataเพื่อสร้างขนาดต่างๆและwp_insert_attachmentแนบไปกับโพสต์

ขอบคุณ Simon

คำตอบ:


29

มีฟังก์ชั่นที่ยอดเยี่ยมที่จะทำทั้งสามอย่างให้คุณ:

media_sideload_image( $url, $post_id, $description );

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

ฉันขอแนะนำให้หาวิธีการเร่งการดาวน์โหลดเพื่อที่คุณจะได้ไม่ต้องออกนอกเวลาเช่น จำกัด จำนวนภาพที่ดึงเข้ามาต่อการโหลดและตั้งผู้นำเข้าให้รีเฟรชตัวเองระหว่างการดาวน์โหลดหรือการใช้ AJAX ในเวลาไม่ตรงกัน


1
นั่นคือจอห์นที่ยอดเยี่ยมอย่างแน่นอนขอบคุณมาก - มันทำงานได้อย่างสมบูรณ์แบบ การควบคุมปริมาณไม่ได้เป็นปัญหาเพราะฉันได้ตั้งค่าให้รอการกดปุ่มหลังจากนำเข้าโพสต์แต่ละครั้งเพื่อให้เรามีโอกาสตรวจสอบรายละเอียดด้วยตนเองและบันทึกสิ่งที่มีปัญหา
Simon Blackbourn

1
เพียงเพราะฉันต้องการรหัสของสิ่งที่แนบมาที่จะเชื่อมต่อกับโพสต์อื่นนี่เป็นวิธีที่ดีในการทำเช่นนั้น
axel

3

คำตอบของ John นั้นถูกต้องอีกครั้งโดยใช้media_sideload_imageเพียงแค่ทราบว่าคุณอาจต้องใช้สคริปต์เหล่านี้ก่อนถ้าคุณไม่ได้ทำสิ่งนี้ภายในบริบทของ WP Admin:

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

ดูhttps://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

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