欢迎光临
我们一直在努力

WordPress 将图片下载到本地并将下载的图片添加到媒体库

在 WordPress 中将图片下载到本地并添加到媒体库,一般需要以下步骤:

  1. 获取图片 URL 首先需要获取到图片的 URL,可以使用正则表达式从文章内容中提取出所有的图片链接,或者通过某些插件 API 直接获取所有的图片信息。
  2. 下载图片到本地 通过 WordPress 提供的函数 wp_remote_get 可以将远程图片下载到本地。这个函数会返回一个响应对象,其中包含了下载的文件内容。我们可以使用 wp_remote_retrieve_body 函数获取到响应对象中的文件内容,然后将其保存到本地文件中。
  3. 添加到媒体库 将图片保存到本地后,我们需要将其添加到 WordPress 的媒体库中。可以使用 wp_insert_attachment 函数将图片添加到媒体库中。在调用这个函数之前,需要先调用 wp_check_filetype 函数获取文件的 MIME 类型,并创建一个包含图片相关信息的数组 $attachment_data。添加图片到媒体库后,还需要调用 wp_generate_attachment_metadata 函数生成图片的元数据信息,并使用 wp_update_attachment_metadata 函数将元数据信息保存到数据库中。
  4. 替换文章中的图片链接 完成前三个步骤后,需要将文章中的远程图片链接替换为本地图片链接。可以使用 PHP 的 str_replace 函数将文章中所有的远程图片链接替换为本地图片链接。

总之,这个过程比较复杂,但是使用 WordPress 提供的函数可以简化很多操作。具体实现可以参考一下的代码块。

以下是一个将远程图片下载到本地并添加到媒体库的简单示例代码:

/**
* 下载远程图片并添加到媒体库
* @param string $url 图片的URL地址
* @return int|false 成功返回媒体库中图片的ID,失败返回false
*/
function download_image_and_add_to_media_library($url) {
// 获取上传目录
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['path'];

// 获取文件名
$filename = basename($url);
$file_path = $upload_path . '/' . $filename;

// 判断文件是否已经存在
if (file_exists($file_path)) {
// 如果文件已经存在,直接返回媒体库中对应图片的ID
$attachment_id = attachment_url_to_postid($upload_dir['url'] . '/' . $filename);
if ($attachment_id) {
return $attachment_id;
}
}

// 下载图片并保存到本地
$response = wp_remote_get($url, array('timeout' => 300));
$body = wp_remote_retrieve_body($response);
$image = imagecreatefromstring($body);
if ($image === false) {
return false;
}
imagepng($image, $file_path);
imagedestroy($image);

// 添加到媒体库
$attachment_data = array(
'guid' => $upload_dir['url'] . '/' . $filename,
'post_mime_type' => wp_check_filetype($filename)['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
'post_status' => 'inherit'
);
$attachment_id = wp_insert_attachment($attachment_data, $file_path);
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attachment_data = wp_generate_attachment_metadata($attachment_id, $file_path);
wp_update_attachment_metadata($attachment_id, $attachment_data);

// 返回媒体库中对应图片的ID
return $attachment_id;
}

这个函数可以直接传入图片的 URL 地址,返回添加到媒体库后对应图片的 ID。如果图片已经存在于本地并且已经添加到媒体库中,则直接返回对应图片的 ID。如果下载失败或者添加到媒体库失败,则返回false。你可以将这个函数用于你的 WordPress 插件中,根据需要进行修改。

通过图片ID调用图片信息

在 WordPress 中,可以使用函数 wp_get_attachment_image() 通过图片的 ID 来获取图片的 HTML 代码。

以下是一个获取图片 HTML 代码的示例:

// 假设你已经有了一个图片的 ID,比如 $image_id = 123。
$image_html = wp_get_attachment_image($image_id, 'full');
echo $image_html;

其中,第一个参数 $image_id 是图片的 ID,第二个参数 'full' 表示获取原始大小的图片。你也可以根据需要指定其他图片大小,比如 'thumbnail''medium''large' 等。函数 wp_get_attachment_image() 的返回值是图片的 HTML 代码,你可以将它输出到文章中。

如果你想要获取图片的其他信息,比如图片的标题、描述、文件路径等,可以使用 wp_get_attachment_metadata()wp_get_attachment_image_src() 等函数。

窗外天空
关注公众号『窗外天空』

获取更多建站运营运维新知!
互联网创业、前沿技术......

赞(0) 打赏
文章名称:《WordPress 将图片下载到本地并将下载的图片添加到媒体库》
文章链接:https://www.nixonli.com/76.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    感谢分享,谢谢站长!!@天天下载

    天天下载资源网(TTzip.com)1年前 (2023-03-21)回复

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏