Lập trình lấy hình ảnh bằng URL và lưu trong thư mục tải lên


14

Tôi đang tham gia vào một cuộc di chuyển lớn từ một CMS khác sang WordPress. Chúng tôi có một bản sao của cơ sở dữ liệu và đã tìm ra cách trích xuất nội dung và lập trình tạo các bài đăng WordPress từ nó bằng cách sử dụng một khởi tạo của wpdblớp.

Tuy nhiên, có một vài ngàn hình ảnh mà chúng tôi muốn tự động kéo qua, tạo các kích cỡ khác nhau và sau đó đính kèm vào bài đăng, để tiết kiệm khoảng một tuần làm việc!

Có cách nào để tôi có thể lấy hình ảnh từ một trang web từ xa bằng URL và lưu nó trong thư mục wp-uploads của mình không? Tôi đoán điều này sử dụng wp_httpnhưng tôi không quen với điều đó.

Khi tôi đã có hình ảnh và lưu nó, tôi vẫn có thể sử dụng wp_generate_attachment_metadatađể tạo các kích cỡ khác nhau và wp_insert_attachmentđính kèm nó vào bài viết.

Cảm ơn Simon

Câu trả lời:


29

Thực sự có một chức năng tuyệt vời sẽ làm cả ba điều đó cho bạn:

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

Đối số đầu tiên là url từ xa của hình ảnh bạn muốn tải xuống. Đối số thứ hai là id bài đăng của bài đăng mà bạn muốn đính kèm hình ảnh. Đối số thứ ba là tùy chọn, nhưng sẽ là một mô tả nếu được bao gồm.

Tôi khuyên bạn nên tìm cách giảm tốc độ tải xuống để không bị hết thời gian, chẳng hạn như giới hạn số lượng hình ảnh mà nó tải trong mỗi lần tải và đặt nhà nhập khẩu tự làm mới giữa các lần tải xuống hoặc sử dụng AJAX để thực hiện chúng tại một thời điểm không đồng bộ.


1
đó là john hoàn toàn tuyệt vời, cảm ơn bạn rất nhiều - nó hoạt động hoàn hảo. điều chỉnh không phải là một vấn đề vì tôi đã đặt nó chờ một lần nhấn phím sau mỗi lần nhập bài để cho chúng tôi cơ hội kiểm tra thủ công các chi tiết và lưu ý bất kỳ vấn đề nào.
Simon Blackbourn

1
chỉ vì tôi cần Id của tệp đính kèm được kết nối với một bài đăng khác, đây là một cách tốt để làm điều đó
axel

3

Câu trả lời của John là chính xác: sử dụng media_sideload_image, chỉ cần lưu ý rằng bạn có thể cần phải yêu cầu các tập lệnh này trước nếu bạn không làm điều này trong bối cảnh của 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');

Xem https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.