我为您编写了此函数,它将首先复制外部图像,裁剪它,并返回其ID:
function external_image_loader ($image_url, $post_id, $title) {
$img_name = basename ($image_url);
global $wpdb;
$query = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = \'$img_name\'";
$id = $wpdb->get_var($query);
if (is_numeric($id)) {
return $id;
} else {
$attachment_src = media_sideload_image( $image_url, $post_id, $title,\'src\' );
$query = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = \'$img_name\'";
$id = $wpdb->get_var($query);
return $id;
}
}
以下是您将如何使用此功能:
$small_image_url = wp_get_attachment_image_src(external_image_loader($image_url, $post_id, $title), \'photography-gallery-grid\', true);
How does it work?
首先,该函数提供了一个图像URL和一个帖子id。这两个是必需的,但标题不是。它将检查数据库中是否已经存在该图像,如果id存在,则函数会将id返回给
wp_get_attachment_image_src()
最终会得到你想要的结果。
但如果没有,它将使用media_sideload_image()
. 之后,它将在数据库中搜索图像并返回其ID。
如果图像的高度为529px或更小,则不会对其进行裁剪。
如果不想保存图像的副本,则必须通过JavaScript来实现。查看this 问题
如前所述,PHP也可以在不保存图像的情况下执行此操作,但这最终会耗尽服务器的资源并降低网站的速度。