实现WordPress文章中远程图片的自动本地化(即将外链图片下载并保存到本地服务器),您可以考虑使用插件或自定义代码来实现这个功能。

方法一:使用插件

  1. 安装并激活“Auto Upload Images”插件或类似的插件,配置插件的设置。
  2. 编写或编辑文章时,插件会自动检测并下载文章中的远程图片,并将它们保存到本地服务器。

插件下载地址:Auto Upload Images

方法二:自定义代码

如果您更喜欢通过自定义代码来实现此功能,可以按照以下步骤操作:

在WordPress主题的functions.php文件中添加以下代码。

function custom_upload_remote_images($content) {
// 匹配所有的 <img> 标签中的 src 属性
preg_match_all('/<img[^>]+src=["\']([^"\']+)["\'][^>]*>/i', $content, $matches);

if (!empty($matches[1])) {
foreach ($matches[1] as $image_url) {
// 检查图片是否已经下载过
$upload_dir = wp_upload_dir();
$filename = basename($image_url);
$local_image_path = $upload_dir['path'] . '/' . $filename;

if (!file_exists($local_image_path)) {
// 获取远程图片
$response = wp_remote_get($image_url);

if (is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response)) {
continue; // 跳过下载失败的图片
}

$image = wp_remote_retrieve_body($response);

// 生成唯一的文件名
$unique_filename = wp_unique_filename($upload_dir['path'], $filename);
$local_image_path = $upload_dir['path'] . '/' . $unique_filename;

// 保存图片到本地
if (file_put_contents($local_image_path, $image) === false) {
continue; // 跳过保存失败的图片
}

// 添加附件到媒体库
$attachment = array(
'guid' => $upload_dir['url'] . '/' . $unique_filename,
'post_mime_type' => wp_check_filetype($unique_filename)['type'],
'post_title' => sanitize_file_name($unique_filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $local_image_path);
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id, $local_image_path);
wp_update_attachment_metadata($attach_id, $attach_data);

// 替换文章中的远程图片链接为本地链接
$content = str_replace($image_url, $upload_dir['url'] . '/' . $unique_filename, $content);
} else {
// 替换文章中的远程图片链接为本地链接
$content = str_replace($image_url, $upload_dir['url'] . '/' . $filename, $content);
}
}
}
return $content;
}
add_filter('the_content', 'custom_upload_remote_images');

当发布或更新文章时,上述代码将自动将它们下载并保存到本地服务器,推荐使用自建Wordpress插件的方式实现。

声明:本文由 秋光暖暖 收集整理并发布,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。