实现WordPress文章中远程图片的自动本地化(即将外链图片下载并保存到本地服务器),您可以考虑使用插件或自定义代码来实现这个功能。
方法一:使用插件
- 安装并激活“Auto Upload Images”插件或类似的插件,配置插件的设置。
- 编写或编辑文章时,插件会自动检测并下载文章中的远程图片,并将它们保存到本地服务器。
插件下载地址: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插件的方式实现。
声明:本文由 秋光暖暖 收集整理并发布,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)